반응형

퍼온글임..

 

 

확장 DLL 전역변수 선언 및 사용

1. 전역변수 사용에 대한 고찰..
: 전역 변수는 파일 내부의 전역변수와 파일 외부의 전역변수로 나뉩니다.

: 파일 내부의 전역변수는.. 그 파일 내에서 유효한 범위를 가지는 변수로
함수의 외부에서 선언하며 그 선언된 아래쪽에서 유효합니다.

: 파일 외부의 전역변수는.. 그 프로젝트에 포함된 다른 소스 파일의 전역변수 중
공통으로 가져다 쓰고자 할 때 사용되며, 포함하고자 하는 소스파일에서는
extern 변수형 변수명..형태로 포함한 후.. 자신의 전역변수처럼 사용할 수 있습니다.

: 아래에 내부 전역 변수와 외부 전역 변수를 구분합니다.

ex) A.cpp ----

#include "stdafx.h"
#include "A.h"

...

int g_nSum = 0; <== 전역변수..일반적으로 Global이라는 뜻의 g_사용(이츠 미)

CA::MyFunc()
{

int nValue = 10; <== 지역변수..함수 내부에서만..유효

m_nKuk = 100; <== 멤버 변수 형태..

g_nSum += (nValue + m_nKuk); <== 전역변수 사용

....

}

CA::PrintSum()
{

printf( "%d", g_nSum );

}

사실.. 클래스 개념으로 오면서.. 전역변수와 멤버 변수는 차이가 없어졌습니다..

도스형 코딩에 익숙한..깨고르..같은 사람은.. 부분적으로 쓰고는 있지만..
멤버 변수와 컨트롤 변수, 전역변수.. 비슷하면서도..조금은 다르더군여..

그렇지만..멤버 변수와 전역변수는 거의 같은거 가타영..!--

-----------------------------------------------------------------------------

B.cpp ---

#include "stdafx.h"
#include "B.h"

...

int g_nSum; <== 이로케..하면.. 내부의 전역 변수가..되어서. A.cpp의
g_nSum 과는 전혀 다른값을 가지게..됩니다.

위의 부분을 외부 전역변수 형태로 만든다면..

int g_nSum ==> extern int g_nSum; 처럼..해주면..됩니다.

즉.. 자신의 파일이 아닌..외부(extern)의 파일에 전역변수 선언되어 있는 g_nSum을 
이용하겠다고 컴파일러에게 알리는 것입니다.

그리고선.. 그냥..자신의 전역변수처럼..쓸 수 있져..!--

2. DLL 내부에서 전역변수 선언하기(외부 전역변수 선언으로..)
: 전역변수의 원형 선언 : __declspec(dllexport) 변수 타입, 변수~명..

ex) __declspec(dllexport) int g_nSum;

: DLL 전체에서 사용하기 위해..extern 선언.. : extern __declspec(dllexport) 변수 타입, 변수~명..

ex) extern __declspec(dllexport) int g_nSum;

+++> 위의 전역변수 선언을 보면.. __declspec(dllexport)외에는 별루 다른게 없어 보입니다.

: 클래스를 확장 DLL로 선언하기..위하여..

클래스의 헤더 선언부에.. class CA::public CWnd
{
요런식으루..선언되어 있는데..
이걸.. 다음과 같이.. 앞쪽에.. AFX_EXT_CLASS 를 붙여서.. 외부로 인터페이스 가능한 클래스라구
컴파일러에 통보합니다.

class AFX_EXT_CLASS CA::public CWnd
{

처럼여..


3. 확장 DLL을 이용하는 프로그램에서..

: DLL에 선언된 전역 변수를 포함해야져.. 
: DLL 전체에서 사용하기 위해.. extern 선언했던 것과 유사합니다.
: extern __declspec(dllimport) int g_nSum;

자세히..보면.. __declspec(dllexport) 가.. __declspec(dllimport)로 바뀐것을
알 수 있습니다.

export는..밖으루.. 오픈될 수 있는..
import는..밖에 선언되어 있는걸..가져올 수 있는.. 이라는..의미를 가진듯 합니다. --;;;


반응형

+ Recent posts