C++ 共享库不导出“外部 C”函数 [关闭]

C++ Shared Library does not export "extern C" functions [closed]

提问人:Tohrwarneth 提问时间:11/4/2023 最后编辑:273KTohrwarneth 更新时间:11/4/2023 访问量:67

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

19天前关闭。

我正在开发一个共享库并添加一些函数,这些函数导出为 c 函数,因此我可以在 C# 中轻松使用它们。但是我的 c 函数都没有导出。

根据应用程序 DependenciesGUI,我的 c++ 函数被导出,但我的 c 函数都没有。

我创建了一个测试类来演示我的问题: TEST_API包含 __declspec(dllimport) 和导出

#pragma once
#include "DLL_Macro.h"

class TEST_API Attempt {
    int x;
public:
    Attempt(int x);
    int adding(int y);
};

extern "C" __declspec(dllexport) void* Create(int x) {
    return (void*) new Attempt(x);
};

extern "C" __declspec(dllexport) int AttemptAdd(Attempt * a, int y) {
    return a->adding(y);
};
C++ DLL 共享库 dllexport extern-c

评论

2赞 Some programmer dude 11/4/2023
请显示DLL和使用它的应用程序的最小可重现示例
0赞 Tohrwarneth 11/4/2023
这个类在 c++ 方面应该足够了。除了你想看我的cmake文件。我可以添加一个c#代码,但仍然存在dll没有c函数的问题。
0赞 user17732522 11/4/2023
@Tohrwarneth 该类应与函数定义是否导致发出函数无关。根据该工具,是否也不会产生任何具有符号名称或dll的函数?extern "C" __declspec(dllexport) void* Create(int x) { return nullptr; }Create_Create
0赞 Tohrwarneth 11/4/2023
根据该工具,没有创建功能。只有 cpp 类及其函数。
1赞 Some programmer dude 11/4/2023
您使用类的宏,我认为这是在构建 DLL 时,否则?为什么不将宏也用于非成员函数呢?现在,您只有硬编码导出。如果使用 DLL 将此头文件包含在应用程序中,则它将不起作用。TEST_API__declspec(dllexport)__declspec(dllimport)

答:

0赞 Tohrwarneth 11/4/2023 #1

问题的解决方案很简单: 在源文件中包含带有 extern “C” 函数的标头。就我而言,在类的 cpp 文件中。

评论

0赞 Some programmer dude 11/4/2023
替代解决方案:单独的声明和定义。将声明放在头文件中,将定义(实现)放在源文件中。