通过指针使用P/Invoke在C#中实例化C++类

本文关键字:实例化 C++ Invoke 指针 | 更新日期: 2023-09-27 17:48:49

我正在从C#应用程序中的非托管DLL mscorpe.DLL导入CreateICeeFileGen()函数,以便生成PE文件。这个函数返回一个指向这里定义的C++对象的指针,我是否可以通过C#访问此类中的字段,或者我是否需要编写一个非托管包装DLL?

我目前使用的代码如下:-

[DllImport(@"C:'WINDOWS'Microsoft.NET'Framework'v2.0.50727'mscorpe.dll", EntryPoint = "CreateICeeFileGen")]
static extern void CreateICeeFileGen(out IntPtr iceeFileGenPointer);
...
IntPtr filePtr;
CreateICeeFileGen(out filePtr);    

N.B.:我知道你可以用.net库做类似的事情,但出于我的目的,我需要使用非托管库。

通过指针使用P/Invoke在C#中实例化C++类

您需要一个包装器库才能使用C#中的类。

最好的选择是使用C++/CLI创建包装器,它可以直接调用非托管函数并使用托管类公开详细信息。这将消除对任何事情使用P/Invoke的需要。

(好吧,从技术上讲,如果你知道类布局,你可以用指针算术来访问字段,但这会非常脆弱和混乱,试图以这种方式调用虚拟函数会非常难看)。

它看起来像COM类/接口。你不能只使用COM吗?