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带出了正确的值。请问有没有人遇见过这样的问题,到底是什么原因?
请高手点拨,分不够再给!

解决方案 »

  1.   

    是为空还是里面有chr(0),有chr(0)的话,msgbox可看不到
      

  2.   

    输出一下各个字符的ascii值,查看一下
      

  3.   

    rainstormmaster:我在调用函数语句处设置了一个断点,调试时发现只有str3中有内容的,而前面两个参数均无内容。因是初学VB,也还不知在VB下怎么察看各个字符的ascii值,请大哥指教。
      

  4.   

    以str1为例: Dim i As Long
       For i = 1 To Len(str1)
            Debug.Print Asc(Mid(str1, i, 1))
       Next
      

  5.   

    rainstormmaster:察看前两个参数中各个字符的ascii值,均为32,也就是全部为空。与VCDLL开发人员联系,他们说从DLL返回的参数值是以ASCII编码的,而我曾经看见过有文章中提到VB需要用unicode编码格式的。
    是因为这个原因吗?
      

  6.   

    rainstormmaster:察看前两个参数中各个字符的ascii值,均为32,也就是全部为空。
    另外,对三个参数进行监视,发现监视器中显示的数据类型分别为:
    str1  variant/string
    str2  variant/string
    str3   string
    而我对三个参数的申明是一样的?
      

  7.   

    不好意思,rainstormmaster,这样的错误是我得疏忽
    刚才查了一下资料(下引):火眼识破隐藏的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了。结贴!