为什么我不能在ComVisible结构中混合使用Guid和string成员?

时间:2017-10-19 05:15:31

标签: c# com marshalling

考虑以下界面(registered with regasm /tlb,其中包含c#进程serverclient):

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IComTestTarget
{
    InterestingRecord[] GetInterestingRecords();
}

[ComVisible(true)]
public struct InterestingRecord
{
    public Guid guid;

    [MarshalAs(UnmanagedType.BStr)]
    public string ChatText;
}

如果我尝试拨打GetInterestingRecords,我会在服务器进程中收到异常:

  

参数不正确。 (HRESULT异常:0x80070057(E_INVALIDARG))
  在GetRecordInfoFromTypeInfo
  在OleVariant::CreateSafeArrayDescriptorForArrayRef
  在System.StubHelpers.MngdSafeArrayMarshaler.ConvertSpaceToNative

如果我对该行public Guid guid;发表评论,或者我对该行[MarshalAs(UnmanagedType.BStr)] public string ChatText;发表评论,那么该调用将按预期完成。如果我更改接口以返回单个值而不是数组,则调用将按预期完成。我做错了什么?

GitHub

上的可运行的最小示例

0 个答案:

没有答案