100分:VB6与DLL函数 数组传递的有关问题

100分:VB6与DLL函数 数组传递的问题
用VC6编写了一个DLL。DLL中有一个函数 需要根据VB6传过来的几个数据生成一个数组,而后把数组的值传回给VB6.具体代码如下:

// 整数转BCD码,4位数转存后为2个字节 比如1234 转存后为两个字节 低字节高4位为3 低4位为4 高字节高4位为1 低4位为2
 extern "C" _declspec(dllexport) char _stdcall int2b(int shu , unsigned char *outArr )

 unsigned char E1,E2,E3,E4 ;
 int shu2; 
 E4=int(shu/1000);
 shu2=shu-E4 * 1000;
 E3=int(shu2/100);
 shu2=shu2-E3 * 100;
 E2=int(shu2/10);
 shu2=shu2-E2 * 10;
 E1=shu2; 
 outArr[0]= (E2<<4) | (E1&15);
 outArr[1] =(E4<<4) | (E3&15);
 return 1;
}

VB6中的调用代码如下:

Dim sz(10) As Byte
Dim BH As Long
DIM I AS LONG
FOR I=0 TO 10
  sz(I)=0
NEXT I
BH = 1234
A = int2b(BH, sz(0))

以上代码得到的结果却是sz(0)=86 sz(1)=185

在VC中调试此代码得到的结果是第一个值为&H34=52,第二个值是&H12=18 为什么VB6调用DLL中的此函数后,得到的结果却不对呢。 请问是何原因。



------解决方案--------------------
declare function int2b lib "libname.dll" ( byval shu as long, outArr() as byte)

A = int2b(BH, sz())
------解决方案--------------------
declare function int2b lib "libname.dll" ( byval shu as long, outArr as any)

int2b(BH, sz(0))