描述:
如题:
com中定义,
long MyArrayTest(VARIANT* vararr);
。net中,封装后,
public virtual int MyArrayTest(ref object vararr);
调用代码,
string[] strarr = new string[3]{"aaa", "bbb", "ccc"};
System.Object strobject = strarr;
axMfcComArray1.MyArrayTest(ref strobject);
----
编译也通过了, 但是,倒运行得时候, 就有错误了, 抛出了一个异常,
未处理的“System.Runtime.InteropServices.COMException”类型的异常出现在 mscorlib.dll 中。
其他信息: 类型不匹配。 (异常来自 HRESULT:0x80020005 (DISP_E_TYPEMISMATCH))
请问各位高手, 该怎么传这个参数呢????
解决方案1:
如果我没猜错的话VARIANT是一个结构体。那么你要在C#中定义一个一样的结构体,才能将数据传送过去!
解决方案2: Visual Basic .NET 更新了通用数据类型,旨在提供与公共语言运行库的互操作性。
Visual Basic 6.0
在 Visual Basic 6.0 中,Variant 用作通用数据类型。这意味着可在类型为 Variant 变量中存储任意类型的数据。
Visual Basic .NET
在 Visual Basic .NET 中,Object 是通用数据类型。类型为 Object 的变量可存放任意类型的数据。不支持 Variant 类型,其所有功能由 Object 提供。
Variant 在 Visual Basic .NET 中仍是保留字,即使它无语法用途。这有助于避免与其以前的含义相混淆。
VarType 函数返回提供对象变量数据类型分类的 VariantType 枚举的成员。您还可以使用 System 命名空间中的类来获得 Object 实例的数值数据类型信息,如以下代码所示:
Dim SomeObj As Object
' ... ... ... ... SomeObj is assigned some value during processing.
' ... ... ... ... Now we want to find out the data type of SomeObj.
Dim Dtype As Integer ' To hold numeric data type result.
Dtype = Type.GetTypeCode(SomeObj.GetType())