Windows使用GCC调用DLL内部的类

 
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 <string>
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 <windows.h>
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 <cstdlib>
#include <iostream>
#include "dll.h"
using namespace std;
int main(int argc, char *argv[])
{
    DllClass dc;
    cout << dc.kk << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
RUN: 
 

猜你喜欢

转载自blog.csdn.net/likelynn/article/details/1821446