主题:[原创]vc调用vb时数组的传递问题
各位大侠:
我现在要用VC调用vb编写的DLL中的一个函数。开始我做了一个小程序,函数为:add(x as integer,y as integer,z as integer)在vb中生成dll ,然后用VC调用,进行运算都成功了。(在VC生成的tli文件中函数为:add(short*x,short*y,short*z)。)现在我把要编译的函数在VB中生成DLL,其中函数的参数有很多的数组。在调用的时候,vc生成的tli文件中函数变为:nline _variant_t _Class1::HuaFenWangGe ( short * Num, [color=#FF0000]SAFEARRAY * * x, SAFEARRAY * * y, SAFEARRAY * * z, short * uNum, SAFEARRAY * * uNode1, SAFEARRAY * * uNode2, short * bNum, SAFEARRAY * * bNodeNum, SAFEARRAY * * bNodeNo, short * MeshType, double * MaxL, long * PNum)[/color] 。其中显示为:SAFEARRAY都为数组,赋值运算的时候都无法通过,请各位大侠帮帮忙吧,这个问题怎么解决呀!怎样定义参数才能使VC调用这个vb的这个函数进行计算呀!
附:生成的tli的内容:
#pragma once
//
// interface _Class1 wrapper method implementations
//
inline _variant_t _Class1::HuaFenWangGe ( short * Num, SAFEARRAY * * x, SAFEARRAY * * y, SAFEARRAY * * z, short * uNum, SAFEARRAY * * uNode1, SAFEARRAY * * uNode2, short * bNum, SAFEARRAY * * bNodeNum, SAFEARRAY * * bNodeNo, short * MeshType, double * MaxL) VARIANT _result;
VariantInit(&_result);
HRESULT _hr = raw_HuaFenWangGe(Num, x, y, z, uNum, uNode1, uNode2, bNum, bNodeNum, bNodeNo, MeshType, MaxL,&_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _variant_t(_result, false);
}
我对VC还是不很熟悉,恳请大家拔刀相助,小弟不胜感激!
我现在要用VC调用vb编写的DLL中的一个函数。开始我做了一个小程序,函数为:add(x as integer,y as integer,z as integer)在vb中生成dll ,然后用VC调用,进行运算都成功了。(在VC生成的tli文件中函数为:add(short*x,short*y,short*z)。)现在我把要编译的函数在VB中生成DLL,其中函数的参数有很多的数组。在调用的时候,vc生成的tli文件中函数变为:nline _variant_t _Class1::HuaFenWangGe ( short * Num, [color=#FF0000]SAFEARRAY * * x, SAFEARRAY * * y, SAFEARRAY * * z, short * uNum, SAFEARRAY * * uNode1, SAFEARRAY * * uNode2, short * bNum, SAFEARRAY * * bNodeNum, SAFEARRAY * * bNodeNo, short * MeshType, double * MaxL, long * PNum)[/color] 。其中显示为:SAFEARRAY都为数组,赋值运算的时候都无法通过,请各位大侠帮帮忙吧,这个问题怎么解决呀!怎样定义参数才能使VC调用这个vb的这个函数进行计算呀!
附:生成的tli的内容:
#pragma once
//
// interface _Class1 wrapper method implementations
//
inline _variant_t _Class1::HuaFenWangGe ( short * Num, SAFEARRAY * * x, SAFEARRAY * * y, SAFEARRAY * * z, short * uNum, SAFEARRAY * * uNode1, SAFEARRAY * * uNode2, short * bNum, SAFEARRAY * * bNodeNum, SAFEARRAY * * bNodeNo, short * MeshType, double * MaxL) VARIANT _result;
VariantInit(&_result);
HRESULT _hr = raw_HuaFenWangGe(Num, x, y, z, uNum, uNode1, uNode2, bNum, bNodeNum, bNodeNo, MeshType, MaxL,&_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _variant_t(_result, false);
}
我对VC还是不很熟悉,恳请大家拔刀相助,小弟不胜感激!