不幸的是,我无法帮助您处理托管代码部分,但这就是您在 CMake 中创建 DLL 的方法:
首先,不要使用
`ADD_EXECUTABLE( YourLib SHARED yourclass.cpp yourclass.h )`
in your CMakeLists.txt
, use
`ADD_LIBRARY( YourLib SHARED yourclass.cpp yourclass.h )`
这会将解决方案配置为创建 DLL 而不是可执行文件。
但是,为了能够在您的项目中使用此 DLL,您需要导出要使用的符号。为此,您需要添加__declspec( dllexport )
您的类和/或函数声明。构建库将生成两个文件,一个 .dll
and a .lib
。后一个就是所谓的导入库,当你想在其他项目中使用这个库时,你需要使用它。这.dll
将在运行时需要。
However:当你想使用你的库时,你需要使用__declspec( dllimport)
(而不是dllexport
)。为了避免使用两个头文件,通常的方法是使用预处理器。 CMake 实际上通过提供一个来帮助你YourLibrary_EXPORTS
define
在您的图书馆项目中。
总结一下:
#ifndef YOUR_CLASS_H
#define YOUR_CLASS_H
#ifdef YourLib_EXPORTS
#define API_DECL __declspec( dllexport )
#else
#define API_DECL __declspec( dllimport )
#endif
class APIDECL YourClass {
void foo();
void bar();
};
#endif // YOUR_CLASS_H
编辑:
如果您希望能够使用 C(以及能够使用 C 函数的语言)中的这些函数,您应该将声明包装为extern "C" {
extern "C" {
API_DECL void myFirstFunction();
API_DECL void mySecondFunction();
}