我有一个非托管类,我正在尝试从托管 DLL 文件中导出。我正在尝试在另一个托管 DLL 文件中使用非托管类。但是,当我尝试执行此操作时,出现了链接 错误。
我对非托管 DLL 文件做过很多次,所以我知道它是如何工作的。我知道如何在托管类中使用“public ref”等。
我需要在某处设置一些标志吗?还是我必须做一些 DllImport 魔术?
这是在 .NET 2.0 和 Visual Studio 2005 上.
最佳答案
如果您想从托管代码中使用非托管类,您可以:
- 使用一些讨厌的东西 P/Invoke加载类成员函数(构造函数、析构函数等)并制作一个更糟糕的托管包装类来调用“真实”成员函数。当涉及虚拟方法时,情况会变得更糟。
- 第二个选项(在我看来更好)是写一个 C++/CLI包装类(您提到过您对此很熟悉)是非托管类的简单代理。对于非托管类中的每个成员函数,您的代理类中都会有一个类似的成员函数。然后这是一个从托管项目添加对该 DLL 的引用的简单案例,您将能够像使用任何其他 .NET 类一样使用您的类。考虑到如果您的类(class)公开其他非托管内容(那些无法编码的内容),您将遇到更多工作。
如果您需要有关第二个选项的更多信息,我可以查找一些旧链接来更多地解释此技术。
关于c++ - 如何在 .NET 中使用托管 DLL 中的非托管类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/674009/