퍼온글임..
확장 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는..밖에 선언되어 있는걸..가져올 수 있는.. 이라는..의미를 가진듯 합니다. --;;;
'운영체제 & 병렬처리 > DLL_LIB' 카테고리의 다른 글
Dll과 Lib 차이와 설명 (0) | 2012.11.01 |
---|---|
Dll 예제 파일, 소스안에 설명 (0) | 2012.11.01 |
dllimport과 dllexport (0) | 2012.11.01 |
__declspec(dllimport)의 호출 원리 (0) | 2012.11.01 |
dll 에서 함수, 변수 읽어오기 GetProcAddress() (0) | 2012.11.01 |