【发布时间】:2014-06-06 08:47:05
【问题描述】:
我是 PInvoke 的新手,需要一些帮助。
我想使用 PInvoke 访问 IEnumGUID,我在 pinvoke.net 上找到了一个代码块。
[ComImport, Guid("0002E000-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), ComVisible(false)]
public interface IEnumGUID
{
int Next(int celt, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)]Guid[] rgelt);
void Skip(int celt);
void Reset();
[return: MarshalAs(UnmanagedType.Interface)]
IEnumGUID Clone();
}
这里的 Clone 函数将 IEnumGUID 作为返回值,而the function in the the original C++ interface 将其作为输出参数。
HRESULT Clone(
[out] IEnumGUID **ppenum
);
我了解到 PInvoke 会自动将 HRESULT 转换为 COMException,但我不知道 PInvoke 如何将 out 参数 转换为 返回值。
请对此进行一些解释,以便我以后可以正确使用此方法。
【问题讨论】: