vb中调用VC编译的dll的函数有关问题,50分送.

vb中调用VC编译的dll的函数问题,50分送...
我要调用同事编的VC编译的dll文件中的函数,用来读取本地两个文本文件,并查询文件中的数据,但是弄了很久,也不行.程序可以运行通过,但是在Query函数中输入不同的EnglishText变量,chineseText的返回值是同样的27809这个数字,不是我需要的不同的中文字符串.我自觉是VC6中的这两个函数的声明不对,但是试验了很多种,都不行.请各位大侠多多指教,本人是VB菜鸟,非常感谢.


1.vc6中dll的原型如下:(VC中导出方式应该没有问题,加了stdcall方式,并且用def文件到处,此外用dependencies看过导出函数库了,名字没有变化..)
int   LoadAllData(char   *FileName1,   char   *FileName2);
int   QueryDI(char   *strEnglish,   unsigned   short   *strChinese);


2.vb6中声明如下
Public   Declare   Function   LoadAllData   Lib   "Query.dll "   (ByVal   FileName1   As   String,   ByVal   FileName2   As   String)   As   Long
Public   Declare   Function   Query   Lib   "Query.dll "   (ByVal   strEnglish   As   String,   ByRef   strChinese   As   Integer)   As   Long

3.vb6中调用主要如下:

Dim   returnInt   as   Interget
Dim   ChineseText   As   Integer  
Dim   EnglishText   As   String
returnInt   =   LoadAllData( "input1.dat ", "input2.dat ")
returnInt   =   Query(EnglishText,   ChineseText)

------解决方案--------------------
int QueryDI(char *strEnglish, unsigned short *strChinese);

后面那个东西,在VC DLL里面是不是一个指向字符串缓冲区的指针?

如果是,那么你的声明就改成这样:

Public Declare Function Query Lib "Query.dll " (ByVal strEnglish As String, ByVal strChinese As String) As Long

同时在调用时,为strChinese变量分配足够的长度,如下:

Dim returnInt as Interget
Dim ChineseText As String * 255 '这里分配255个字节的长度
Dim EnglishText As String

returnInt = LoadAllData( "input1.dat ", "input2.dat ")
returnInt = Query(EnglishText, ChineseText)

在最后,我还想明白一下,你第一个LoadAllData函数的两个参数,文件名确定没问题?(你没有带路径,文件是否放在了工程目录下?)
------解决方案--------------------
方案一:
Public Declare Function Query Lib "Query.dll " (ByVal strEnglish As String, ByRef strChinese As String) As Long

ChineseText = space(256) '需要有足够输出的空间
rnInt = Query(EnglishText, ChineseText)

如果 ChineseText 为乱码,试试用下面的两个方法之一再转换一下
ChineseText = StrConv(ChineseText, vbFromUnicode)
ChineseText = StrConv(ChineseText, vbUnicode)

方案二:
Public Declare Function Query Lib "Query.dll " (ByVal strEnglish As String, ByVal strChinese As Long) As Long

dim a() as byte
redim a(512) '需要有足够输出的空间
rnInt = Query(EnglishText, varptr(a(0)))
ChineseText = a