gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:31:20 29 4
gpt4 key购买 nike

我写了一个 visual c++ win32 控制台应用程序,我在

win32 console project

.然后我切换到

win32 project

并导入所有源文件并为它创建一个dll。通过将我要导出的类标记为

#define DllExport   __declspec( dllexport )

class DllExport theClass {
}

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

a reference to the '''''''.dll could not be added. please make sure that the file is accessible, and that is a valid assembly or com component.

有人知道我在生成/导入 dll 时哪里做错了吗?

谢谢

最佳答案

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

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

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

如果您想导出 C++ 类,那么唯一的途径是使用 C++/CLI 语言并为 native C++ 类编写“ref 类”包装器。

或者您可以编写一个 COM 协同类,这是 Windows 中的通用粘合剂。 .NET 提供了很好的支持,如果您以前从未编写过 COM 代码,那么您可能不想追求它。 ATL 是实现这一目标的最佳方式。

关于c# - Visual Studio 2010 中的 dll 导出/导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3224729/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com