我从导入的C#应用程序中的非托管的DLL mscorpe.dll的CreateICeeFileGen()函数,以产生一个PE文件。这个函数返回一个指向C ++对象defined here,有没有什么办法可以从该类通过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库,但我需要使用非托管库,我的目的。
你需要一个包装库,以便能够使用类从C#。
最好的办法是创建使用C ++ / CLI的包装,它可以直接调用非托管函数,并与托管类暴露的细节。这将消除需要使用的P / Invoke的任何东西。
(当然,从技术上如果您知道类布局你可以更动指针算法访问的字段,但这将是非常脆弱的,凌乱,并试图调用虚函数以这种方式将是极其丑陋的)。
它看起来像COM类/接口。你能不能只使用COM呢?