如题: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#中的object 不是万能地
      

  2.   

    如果我没猜错的话VARIANT是一个结构体。那么你要在C#中定义一个一样的结构体,才能将数据传送过去!
      

  3.   

    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()) 
      

  4.   

    都是。net 自己 生成得, 改怎么处理呢???
      

  5.   

    那位高手帮帮忙, 看一下了, 当com中参数是, ( VARIANT data )时, 
    。net中    是,  (object data)时, 传参数给 com得时候, 并没有错误, 但是再VARIANT* data 得时候, 就有问题 ????指针该怎么传呢????
      

  6.   

    当com中参数为指针时,添加会有二种
    选[in]时,对应。NET就是ref object data
    选[out,retval]时,对应。NET就是函数的返回值