我试图通过一个(编写得很糟糕的?)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引用的函数。