DLL 내보내기 변수
/* :lib.h */
#ifndef LIB_H
#define LIB_H
extern int dllGlobalVar;
#endif
/* :lib.cpp */
#include "lib.h"
#include <windows.h>
int dllGlobalVar;
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
dllGlobalVar = 100; // dll , 100
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
; :lib.def
; DLL
LIBRARY "dllTest"
EXPORTS
dllGlobalVar CONSTANT
; dllGlobalVar DATA
GetGlobalVar
lib에서.h와lib.cpp에서 알 수 있듯이 전역 변수가 DLL에서 정의하고 사용하는 방법은 일반적인 프로그램 설계와 같다.어떤 전역 변수를 내보내려면, 우리는def 파일의 EXPORTS 이후 추가:
변수 이름 CONSTANT//오래된 메서드 또는
변수 이름 DATA//VC++ 프롬프트의 새로운 방법
DLL :
#include <stdio.h>
#pragma comment(lib,"dllTest.lib")
extern int dllGlobalVar;
int main(int argc, char *argv[])
{
printf("%d ", *(int*)dllGlobalVar);
*(int*)dllGlobalVar = 1;
printf("%d ", *(int*)dllGlobalVar);
return 0;
}
특히 주의해야 할 것은 extern int dll Global Var 성명으로 가져온 것은 DLL의 전역 변수 자체가 아니라 주소이며, 프로그램은 강제 바늘 변환을 통해 DLL의 전역 변수를 사용해야 한다.이 점은 * (int*) dllGlobalVar에서 확인할 수 있습니다.따라서 DLL 글로벌 변수를 참조할 때 이러한 값 지정 작업을 수행하지 마십시오.
dllGlobalVar = 1; 그 결과 dllGlobalVar 포인터의 내용이 바뀌었고 프로그램에서 앞으로 DLL의 전역 변수를 인용하지 못할 것이다.
DLL :
#include <stdio.h>
#pragma comment(lib,"dllTest.lib")
extern int _declspec(dllimport) dllGlobalVar; // _declspec(dllimport)
int main(int argc, char *argv[])
{
printf("%d ", dllGlobalVar);
dllGlobalVar = 1; // ,
printf("%d ", dllGlobalVar);
return 0;
}
_declspec(dllimport) DLL , 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.