在C#中,是否有一种从本机指针调用COM对象方法的简单方法?
[DllImport("d3d11.dll", CallingConvention = CallingConvention.StdCall)]
private unsafe static extern int D3D11CreateDevice(
void* arg0, int arg1, void* arg2, int arg3, void* arg4,
int arg5, int arg6, void* arg7, void* arg8, void* arg9);
public static void CreateDevice()
{
unsafe
{
IntPtr deviceOut;
IntPtr immediateContextOut;
int featureLevelRef;
D3D11CreateDevice(
(void*)IntPtr.Zero,
1,
(void*)IntPtr.Zero,
32,
(void*)IntPtr.Zero,
0,
7,
&deviceOut,
&featureLevelRef,
&immediateContextOut);
}
}
在上面的代码中,我得到deviceOut
,其类型为ID3D11Device*
。 ID3D11Device
接口有许多方法,例如CreateBuffer()
。
我可以使用deviceOut
指针调用其中一些方法吗?提前谢谢。
答案 0 :(得分:2)
如果您有指向COM对象的指针,则可以通过GetObjectForIUnknown
将其转换为对象的实例。
IntPtr ptr = ...;
object unk = Marshal.GetObjectForIUnknown(ptr);
ID3D11Device dev = (ID3D11Device)unk;
从那里你可以调用CreateBuffer
和其他方法