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

标签 c++ windows dll

我正在尝试创建一个没有类的 C++ 动态库。我希望它的工作方式类似于您可以包含 <string.h 的方式> 并直接调用 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++,所以我很生疏

最佳答案

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

关于c++ - 创建一个没有类名的 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935127/

相关文章:

c++ - 如何从字符串中一次选择两个字符?到达字符串的第 i 个位置?

c++ - 对 vector C++ 中的复数进行排序

firefox/Mac 和 firefox/Windows 之间的 css 区别

gcc - 关于 .so 和 .dll 文件的一般问题

c - 没有它们如何获取 GetProcAdress 和 LoadLibrary?

c++ - Qt - 具有自定义参数的可重用绘图函数

c++ - 使用 getline 读取换行符或文本

windows - 如何在Windows批处理模式下获取没有文件扩展名的完整路径的文件名

windows - 各种 Windows 版本附带的 Kernel32.dll 版本列表?

.net - 这个 DLL 是托管的还是非托管的?