我正在尝试从C#代码调用COM接口函数。这是一个聚合的COM接口,我通过ProgID加载实现COM接口,我必须自己声明接口。 c ++函数定义如下:
STDMETHOD(VisualizeList) (HWND hWndParent, DWORD Options, SAFEARRAY **VialPositions,
SAFEARRAY **VialTypes, BSTR* TrayName) = 0;
SAFEARRAY分别包含字符串和整数,用于输入和输出。我已经尝试在C#中定义函数,如下所示:
[PreserveSig]
int VisualizeList([In] IntPtr hwdParent,
[In] uint Options,
[In, Out][MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_BSTR)] ref String[] VialPositions,
[In, Out][MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_I4)] ref int[] VialTypes,
[In, Out] ref String TrayName);
但是当我尝试调用接口函数时,它会崩溃。我在想SAFEARRAY,因为其他一切看起来都相对简单。我想我需要再为SAFEARRAY提供一个参考命令,但我不知道该怎么做。那么,如何从托管代码传递SAFEARRAY **类型的参数?我已经在网上和其他帖子进行了扫描,但找不到任何非常合适的账单。提前谢谢。