如何在.NET中使用托管DLL中的非托管类?

时间:2009-03-23 16:09:05

标签: c++ dll unmanaged dllimport

我有一个非托管类,我正在尝试从托管 DLL文件中运行dllexport。我正在尝试在另一个托管 DLL文件中使用非托管类。但是,当我尝试这样做时,我会收到 link 错误。

我使用非托管DLL文件已经完成了很多次,所以我知道它是如何工作的。我知道如何在托管类中使用“public ref”等。

我需要设置一些标志吗?或者我是否必须做一些DllImport魔术?

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

3 个答案:

答案 0 :(得分:3)

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

  1. 使用一些讨厌的P/Invoke来加载类成员函数(构造函数,析构函数等)并创建一个更糟糕的托管包装类来调用“真正的”成员函数。当涉及虚拟方法时,情况会更糟。
  2. 第二个选项(在我看来更好)是编写一个C++/CLI包装类(你提到你熟悉它),它是非托管类的一个简单代理。对于非托管类中的每个成员函数,您在代理类中都有类似的函数。然后,这是一个从托管项目添加对该DLL的引用的简单情况,您将能够将您的类用作任何其他.NET类。考虑到如果你的课暴露了其他非托管的东西(那些无法编组的东西),你会遇到更多的工作。
  3. 如果您需要有关第二个选项的更多信息,我可以查找更多解释此技术的旧链接。

答案 1 :(得分:1)

您需要为非托管库或COM组件使用互操作程序集。这里有a link,其中有很好的信息。

答案 2 :(得分:0)

如果它是COM DLL文件,那么您可以使用COM .NET互操作性。 Stack Overflow问题 Is there a best practice for accessing C++ native COM functions to interop from C#? 是另一个回答此问题的问题。