Windows에서 GCC를 사용하여 DLL 내부 클래스 호출

3699 단어 GCC

IDE
:
DEV-C++GCC 4.1.2
다음 단계가 필요합니다.
1.

DLL
공정의
XX.a,XX.def,XX.dll
그리고
클래스 헤더 파일
프로젝트 폴더로 복사
2.
프로젝트 포함 클래스의 헤더 파일
3.
에서

프로젝트 옵션
”-


매개 변수
”-


연결기

증대
XX.a
라이브러리 파일
4.
호출:클래스 호출과 동일
참고:
DLL
프로젝트 헤더 파일은 매크로 정의를 추가해야 합니다
1.#ifdef _MS_WINDOWS_
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
    #else
     #define DLLIMPORT
    #endif
 2. “    ”-》“  ”-》“C++   ”   -D_MS_WINDOWS_
 3. “ ”-》“ ”-》“C++ ” -D_MS_WINDOWS_
 
//DLL.H
#ifndef _DLL_H_
#define _DLL_H_
#ifdef _MS_WINDOWS_
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
#else
     #define DLLIMPORT
#endif
#include 
using namespace std;
class DLLIMPORT DllClass
{
  public:
    DllClass();
    virtual ~DllClass(void);
    string kk;
   
  private:
};

#endif /* _DLL_H_ */
//DLL.CPP
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include
DllClass::DllClass()
{
    kk = "aaaaaaaaaa";
}

DllClass::~DllClass ()
{
}

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
      case DLL_PROCESS_DETACH:
        break;
      case DLL_THREAD_ATTACH:
        break;
      case DLL_THREAD_DETACH:
        break;
    }
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
/**********************************************************************/
//USEDLL.CPP
#include 
#include
#include "dll.h"
using namespace std;
int main(int argc, char *argv[])
{
    DllClass dc;
    cout << dc.kk << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
RUN: 

좋은 웹페이지 즐겨찾기