如何从C#

时间:2017-02-24 17:37:39

标签: c# com marshalling safearray

我正在尝试从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 **类型的参数?我已经在网上和其他帖子进行了扫描,但找不到任何非常合适的账单。提前谢谢。

0 个答案:

没有答案