1

我正在从 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);    

注意:我知道你可以用 .net 库做类似的事情,但我需要使用非托管库来实现我的目的。

4

2 回答 2

2

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

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

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

于 2008-10-13T14:19:39.760 回答
0

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

于 2008-10-13T14:24:07.787 回答