我是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();
}
这里的克隆函数将 IEnumGUID 作为 返回值,而原始 C++ 接口中的函数将其作为输出参数。
HRESULT Clone(
[out] IEnumGUID **ppenum
);
我了解到PInvoke会自动将HRESULT转换为COMException,但我不知道PInvoke如何将“out参数”转换为“返回值”。
请给出一些解释,以便我以后可以正确使用这种方法。
[retval]
进行封送的函数不能使用返回值?毕竟,这个属性只是一个提示,不是吗? - IS4