创建一个没有类名的c ++库

时间:2011-02-08 15:45:23

标签: c++ windows dll

我正在尝试创建一个没有类的C ++动态库。我希望它的工作方式类似于<string.h&gt;并直接调用strlen。

我可以创建一个可以编译的类,但不能正确链接到我的库。

这是我正在研究的测试库:

标题

#ifndef _DLL_H_
#define _DLL_H_

BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved);
extern "C" __declspec(dllexport) int testMethod(int a);

#endif

.cpp的

#include "dll.h"

int testMethod(int num)
{
    std::cout << "test message" << std::endl;
    return 1;
}

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;
}

最后,这是我用来测试Dll的类,它被告知链接lib mingw输出

#include <iostream>
#include "../Dll/dll.h"

using namespace std;

int main(int argc, char *argv[])
{
    testMethod(5);
}

我在大约一年内没有使用过C ++,所以我很生气

1 个答案:

答案 0 :(得分:4)

extern "C" __declspec(dllexport) int testMethod(int a);

这需要在链接DLL的应用程序中进行dllimport。大多数人使用#define编译他们的DLL,它控制它是导出还是导入。

#ifdef INSIDE_MYDLL
#define MYDLLAPI __declspec(dllexport)
#else
#define MYDLLAPI __declspec(dllimport)
#endif

extern "C" MYDLLAPI int testMethod(int a);