VB下调用VCDLL函数,DLL函数存在三个参数,均为char*类型,需要带出返回值。VCDLL中函数原型如下:
int fun(char* str1,char* str2,char* str3) 其中str1,str2,str3均需要返回一个字符串。在VB中如下申明:
(byval str1 as string,byval str2 as string,byval str3 as string)
调用时:
dim str1 as string
dim str2 as string
dim str3 as stringstr1=space(10);
str2=space(10);
str3=space(10);
fun(str1,str2,str3);运行时,发现前两个参数str1,str2的值为空,只有最后一个参数str3带出了正确的值。请问有没有人遇见过这样的问题,到底是什么原因?
请高手点拨,分不够再给!
int fun(char* str1,char* str2,char* str3) 其中str1,str2,str3均需要返回一个字符串。在VB中如下申明:
(byval str1 as string,byval str2 as string,byval str3 as string)
调用时:
dim str1 as string
dim str2 as string
dim str3 as stringstr1=space(10);
str2=space(10);
str3=space(10);
fun(str1,str2,str3);运行时,发现前两个参数str1,str2的值为空,只有最后一个参数str3带出了正确的值。请问有没有人遇见过这样的问题,到底是什么原因?
请高手点拨,分不够再给!
For i = 1 To Len(str1)
Debug.Print Asc(Mid(str1, i, 1))
Next
是因为这个原因吗?
另外,对三个参数进行监视,发现监视器中显示的数据类型分别为:
str1 variant/string
str2 variant/string
str3 string
而我对三个参数的申明是一样的?
刚才查了一下资料(下引):火眼识破隐藏的Variant变量 如果没有用As语句声明变量,默认类型就是Variants,比如:
Dim name ’ this is a variant
或者,当前模块下没有声明Option Explicit语句时,任何变量都是Variants类型。
************************
许多开发者,特别是那些先前是C程序员的人,都会深信下面的语句将声明2个Interger类型变量:
Dim x, y As Integer
************************
而实际上,x被声明为了variant类型。由于variant类型变量要比Integer类型慢很多,所以要特别注意这种情况。正确的一行声明方法是:
Dim x As Integer, y As Integer 粗心的我以前申明变量采用了C的习惯,所以写成了
dim str1 ,str2 ,str3 as string
因此,改成
dim str1 as string
dim str2 as string
dim str3 as string
后,程序便OK了。结贴!