我有一个可视化工作室项目,它输出一个静态库,为了我的目的,我想保留这个项目。但我也想要一个带有静态lib导出的许多类的dll,所以在C#app中我可以导入dll并使用导出的函数。
我已经创建了一个应用程序类型为dll的控制台应用程序,并且我已经引用了lib。一切似乎都很好,但是当我在dll上运行dumpbin时,没有任何导出。
我的问题是如何在lib中导出类?
答案 0 :(得分:1)
您需要在班级定义中使用_declspec(export)
关键字。
很多时候你会看到项目有一个宏定义,有一些变体:
#define DllExport __declspec( dllexport )
一个例子:
class __declspec( dllexport ) Foo
{
// ...
};
或
class DllExport Foo
{
// ...
};
答案 1 :(得分:1)
正如在另一个答案中所说,您可以使用__declspec
从DLL导出C ++类,但听起来并不像您需要的那样,因为您说要从C#使用此库,它不理解C ++类,并且使用P / Invoke会很尴尬,因为方法名称会被破坏。
从C#访问C ++类的一些更简单的选项:
您可以将C ++库构建为CLR类库,并使用.NET类包装C ++类,然后在C#项目中引用该类库。
您可以使用Swig围绕C ++代码生成C#包装器。
您可以使用一组C函数来包装C ++类,这些函数可以使用__declspec(dllexport)
从DLL导出,并使用P / Invoke从C#调用。
如果你确实想从DLL中导出C ++类,我建议将构建配置添加到现有的静态库项目中,可能称为“DLL Debug”和“DLL Release”,并更改这些构建的设置构建为DLL的配置,因为它听起来像你现在只是将DLL链接到静态库,而不是导出静态库中的内容。