Visual Studio 2010中的dll导出/导入问题

Gre*_*rey 1 .net c# c++ dll dllimport

我写了一个visual c ++ win32控制台应用程序,我写了它并测试了它

win32控制台项目

.然后我切换到

win32项目

并导入所有源文件并为其创建一个dll.通过标记我想要导出的类

#define DllExport   __declspec( dllexport )

class DllExport theClass {
} 
Run Code Online (Sandbox Code Playgroud)

它工作,并生成DLL.然后我创建了另一个c#项目,并希望将dll添加到项目中.通过引用 - >添加引用 - >浏览器.然后我选择那个DLL.然后它给了我一个错误

无法添加对'''''''的引用.请确保该文件是可访问的,这是一个有效的程序集或com组件.

谁知道我在哪里生错误/生成/导入dll?

谢谢

Han*_*ant 5

"添加引用"对话框仅适用于包含元数据(托管代码)或类型库(COM服务器)的DLL.您的DLL不适合该帐单,您只能使用C#代码中的[DllImport]属性来使用P/Invoke编组程序来调用非托管DLL入口点.

不可能是本机C++类,就像您尝试的那样,托管代码没有可靠的机制来分配非托管内存并调用本机C++类的构造函数(和析构函数).由于难以找到构造函数和析构函数代码,P/Invoke编组器无法知道对象的大小.C++语言不会生成知道此必需信息所需的元数据.

如果你想追求P/Invoke,那么编写一个普通的全局函数,用extern"C",__ declspec(dllexport)和(可选)__stdcall修饰.

如果要导出C++类,那么唯一的途径是使用C++/CLI语言并为本机C++类编写"ref class"包装器.

或者你可以写一个COM coclass,Windows中的通用粘合剂..NET很好地支持,如果你之前从未编写过COM代码,可能不是你想要追求的东西.ATL是获得成功的最好方式.