我在尝试整理的未想象的COM对象中有一个方法:

STDMETHOD(SomeMethod)(LPSTR** items, INT* numOfItems) = 0;

但是我想不出正确的方法来编码LPSTR **物品。应该是项目 list 。但是,如果尝试执行以下操作:
[PreserveSig]
int SomeMethod([MarshalAs(UnmanagedType.LPStr)]ref StringBuilder items, ref uint numOfItems);

我只收到第一个项目的第一个字母,没有别的。

如何正确编码LPSTR **变量?

最佳答案

我现在无法检查,但签名应如下所示:

[PreserveSig]
int SomeMethod(
    [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr, SizeParamIndex = 1)] out string[] items,
    out int numOfItems);

当然,这没有帮助,您始终可以通过Marshal类(如Sinatr建议的那样)执行手动编码。

关于c# - 如何在.NET中编码(marshal)LPSTR **?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43072247/

10-10 23:44