DLL 내보내기 변수

2430 단어 threaddlllibrary
DLL에 정의된 글로벌 변수는 프로세스 액세스를 호출할 수 있습니다.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               ,                    。



 
 
 
 
 
 

좋은 웹페이지 즐겨찾기