问题描述:
有一个c++ 写的dll,里面有对外发布的接口类似 void Get(IInterface** pInterface); pInterface 是 in/out 参数。IInterface是继承于 Iunknown的接口。
现在有一个c#程序需要调用这个dll,请问改如何定义这个导出函数?貌似没有合适的参数传?
欢迎高手指教!!
------解决思路----------------------
void Get(IInterface** pInterface);
IInterface*这是个对象指针,在C#里你定义一个同样的对象就可以了,直接使用IntPtr。
IInterface interf = new IInterface ();
把interf转换成指针,把指针pinterf传入,
Get(pinterf);
得到pinterf后,再转换回去。
int size = Marshal.SizeOf(interf);
IntPtr pinterf = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(interf, pinterf, false);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
试试这个方法行不行
------解决思路----------------------
[ComVisible(true)]
[Guid("E40223B3-DE70-4109-ADED-92A394618778")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
首先确定你的 DLL 是否只 COM 。
如果是,可以注册后,直接导入。 C# 对 COM 有完成的包装。
可以当作托管的 DLL 直接使用。
如果不是 COM 的。那么需要自己主动导出 接口 和相关的函数。
你可以在 C# 里面模拟虚表。
如果,觉得这个很麻烦,可以使用 C++/CLI 建立一个中间 DLL 。
------解决思路----------------------
int size = Marshal.SizeOf(interf);
IntPtr pinterf = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(interf, pinterf, false);
}
finally
{
Marshal.FreeHGlobal(buffer);
}
就是这个方法