C#COM Interop接口包装器带有奇怪的签名,UserId数组指针作为ref UserId

时间:2014-08-26 15:11:33

标签: c# com com-interop

我试图通过一个(编写得很糟糕的?)C#包装器来调用COM接口。我发现包装器中的方法签名有点奇怪。

非托管COM签名:

HRESULT GetUserRoles(
    [in] long size,
    [in,out, unique] UserRoleId* pUserRoles,
    [out, retval] long* pCount)

来自供应商COM包装器的托管签名:

int GetUserRoles(int size, ref UserRoleId pUserRoles)

当我传递size = 1时,它按预期工作,填充pUserRoles并返回1。但是我如何获得所有用户角色?

调用GetUserRoles(5,ref pUserRoles)返回3,因为我正在测试的用户有3个 UserRoles,但我只能访问pUserRoles中的第一个

是否可以将IntPtr分配为UserRoleId数组并以任何方式将其作为参数传递给包装函数?

我使用了包装器API的许多其他部分,并且不想自己重写它。在另一种情况下,包装器中的out参数是一个IntPtr,我已经设法使用GCHandle / IntPtr来实现。认为这可能以类似的方式解决,但我不知道如何将IntPtr传递给期望UserRoleId引用的函数。

0 个答案:

没有答案