vb调用 vc编写activex控件,传入字符数组有关问题
vb调用 vc编写activex控件,传入字符数组问题
遇到一下问题, VB代码如下:
VC中方法实现:
求解各位大大这样传递是否正确, 如果不正确改如何传递数组?
或者有好的方法传递字节数组?
------解决方案--------------------
SAFEARRAY()
------解决方案--------------------
应该是
SAFEARRAY()
忘了怎么用了
------解决方案--------------------
如果传字符数组的话,可以直接用BSTR
http://zh.wikipedia.org/wiki/BSTR.
------解决方案--------------------
遇到一下问题, VB代码如下:
- VB code
Private Sub test12_Click() Dim szName As String Dim iRet As Integer Dim MyVar As Variant ReDim MyVar(0 To 7) As Byte MyVar(0) = &HA0 MyVar(1) = &H0 MyVar(2) = &H0 MyVar(3) = &H2 MyVar(4) = &H41 MyVar(5) = &H0 MyVar(6) = &H0 MyVar(7) = &H0 'szName = "A0 00 00 02 41 00 00 00" 'MyArr = VarPtr(HexStr2Byte(szName)) iRet = ICBCControl1.SelectbyName(MyVar) //-->调用OCX方法 MsgBox (iRet) End Sub
VC中方法实现:
- C/C++ code
short CICBCControlCtrl::SelectbyName(const VARIANT FAR& ID) // <-- { // TODO: Add your dispatch handler code here BYTE abyID[MAXTMP]; short cbID = MAXTMP; if ( !VARIANTToBinary(ID, abyID, cbID) ) //--> 调用,实现如下 return _ERR_TCHANGE_IN; //....... } //将 variant中safearray 转换为数组。 BOOL VARIANTToBinary(VARIANT InArray, BYTE* pbuf, short& len) //<-- 实现 { if ( (VT_BYREF | VT_UI1) != InArray.vt ) //每次在该处断掉,断点InArray.vt 为 VT_VARIANT|VT_BYREF return FALSE; if ( 1 != InArray.parray->cDims ) return FALSE; //ATLASSERT( VT_UI1 == InputArray.parray->) BYTE *pValue = NULL; SafeArrayAccessData(InArray.parray,(void**)&pValue); if ( pValue == NULL) return FALSE; int count = InArray.parray->rgsabound[0].cElements; memcpy(pbuf, pValue, count); len = count; SafeArrayUnaccessData(InArray.parray); return TRUE; }
求解各位大大这样传递是否正确, 如果不正确改如何传递数组?
或者有好的方法传递字节数组?
------解决方案--------------------
SAFEARRAY()
------解决方案--------------------
应该是
SAFEARRAY()
忘了怎么用了
------解决方案--------------------
如果传字符数组的话,可以直接用BSTR
http://zh.wikipedia.org/wiki/BSTR.
------解决方案--------------------