考虑以下界面(registered with regasm /tlb
,其中包含c#进程server和client):
[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;
发表评论,那么该调用将按预期完成。如果我更改接口以返回单个值而不是数组,则调用将按预期完成。我做错了什么?