1

我有一个非托管类,我试图从托管DLL 文件中进行 dllexport。我正在尝试在另一个托管DLL 文件中使用非托管类。但是,当我尝试这样做时,会出现链接错误。

我已经用非托管 DLL 文件做了很多次,所以我知道它是如何工作的。我知道如何在托管类中使用“公共参考”等。

我需要在某个地方设置一些标志吗?还是我必须做一些 DllImport 魔术?

这是在 .NET 2.0 和Visual Studio 2005上。

4

3 回答 3

3

如果您想使用托管代码中的非托管类,您可以:

  1. 使用一些讨厌的P/Invoke来加载类成员函数(构造函数、析构函数等)并制作一个更糟糕的托管包装类来调用“真正的”成员函数。当涉及虚拟方法时,情况会变得更糟。
  2. 第二种选择(在我看来更好)是编写一个C++/CLI包装类(您提到您对此很熟悉),它是非托管类的简单代理。对于非托管类中的每个成员函数,代理类中都会有一个类似的成员函数。然后,这是一个从托管项目中添加对该 DLL 的引用的简单案例,您将能够像使用任何其他 .NET 类一样使用您的类。考虑到如果你的类暴露了其他非托管的东西(那些不能被编组的东西),你会遇到更多的工作。

如果您需要有关第二个选项的更多信息,我可以查找一些旧链接来更多地解释此技术。

于 2009-03-23T17:16:10.103 回答
1

您需要为非托管库或 COM 组件使用互操作程序集。这是一个链接,其中包含有关此的良好信息。

于 2009-03-23T16:19:37.743 回答
0

如果它是一个 COM DLL 文件,那么您可以使用 COM .NET 互操作性。堆栈溢出问题是否有访问 C++ 本机 COM 函数以与 C# 互操作的最佳实践?是另一个回答这个问题的问题。

于 2009-03-23T16:20:16.790 回答