1

我有需要在我们小组的新 C# 程序中使用的本机 C++ dll。我想为本地 C++ dll 创建 C++/CLI 包装器,以便能够在 C# 中导入和编译它们。

我需要知道的是如何首先在包装源文件中加载dll文件。与 #using <...> 对 MSIL 所做的完全相同,但用于加载本机 C++ dll。

此外,dll 中的对象和命名空间将如何(从语法上)变得可访问?

编辑:

我用

class __declspec(dllexport) radar
{
    // declarations and definitions
    ...
};

从我的radar.dll中导出我的雷达类,并需要将其导入VC++(CLI)程序中,如下所示:__declspec(dllimport) public class radar;以便将其定义到C#中,但我绝对看不到C#中的雷达,因为它没有定义在 VC++(CLI) 中公开。即使我想在 VC++ dll 的代码中使用本机 dll 的对象,就像radar pos1();我得到的:

error C2512: 'radar' : no appropriate default constructor available

手头只有雷达声明,怎么能做到这一点?

结束编辑。

谢谢!

4

1 回答 1

3

这是自动的,你不要自己做。您可以在 C++/CLI 项目的链接器设置的附加依赖项设置中指定本机 DLL 导入库 (.lib)。链接器将对 DLL 名称的引用链接到 C++/CLI 程序集中。只要 C# 代码使用 C++/CLI 程序集中的任何托管类型,CLR 就会加载程序集。Windows 会注意到 DLL 中的本机 DLL 引用并自动加载它们。

只有当 Windows 可以在运行时真正找到本机 DLL 时,这才会有一个好的结局。将它们复制到 EXE 项目的构建文件夹中。这很尴尬,您可以通过构建后事件或将它们添加到 C# 项目并将其 Copy to Output Directory 属性设置为 true 来实现。

于 2012-04-17T13:02:37.193 回答