在VB里引用了一个VC生成的dll,作用是根据文件名取得文件内的参数,然后把参数列出来(放到listbox控件内).
现在问题是,listbox里显示出来的比正常的参数字符串多了几个不知道哪里来的字符。
比如,某个文件file1的参数有"dwmc"、"ckzh"、"fh"、"jz",我单步跟踪在watch窗口里看到strParamsArray()数组是正常显示的;但是程序里strParamsArray(i)却成了"dwmcr"、"ckzhr"、"fhxjn"、"jzxjn",在listbox里显示也是"dwmcr"、"ckzhr"、"fhxjn"、"jzxjn".代码如下:
private Sub Command1_Click()
    Dim i As Long
    Dim strParamsArray() As String
    Dim objEngine AS New Engine    '这个是引用的dll

    lstParams.clear
    fileName=Text1.Text
    'getParamsArray函数的作用是根据文件名取得文件内的参数
    strParasArray = objEngine.getParamsArray(App.path & fileName)
    For i = LBound(strParasArray) To UBound(strParasArray)
lstParams.AddItem strParamsArray(i)
    Next i
End Sub这是什么原因造成的呢??该怎么解决??

解决方案 »

  1.   

    可能是 VC的字符串数组 跟VB的字符串数组格式不一样吧 ,要不在dll 里把数组 结合成一个字符传,然后在vb里使用split函数来转化成一个数组
      

  2.   

    漏了个m,重贴代码~~~private Sub Command1_Click()
        Dim i As Long
        Dim strParamsArray() As String
        Dim objEngine AS New Engine    '这个是引用的dll

        lstParams.clear
        fileName=Text1.Text
        'getParamsArray函数的作用是根据文件名取得文件内的参数
        strParamsArray = objEngine.getParamsArray(App.path & fileName)
        For i = LBound(strParamsArray) To UBound(strParamsArray)
    lstParams.AddItem strParamsArray(i)
        Next i
    End Sub
      

  3.   

    晕了~~~路径那里也漏了东西了....private Sub Command1_Click()
        Dim i As Long
        Dim strParamsArray() As String
        Dim objEngine AS New Engine    '这个是引用的dll

        lstParams.clear
        fileName=Text1.Text
        'getParamsArray函数的作用是根据文件名取得文件内的参数
        strParamsArray = objEngine.getParamsArray(App.path & "\" & fileName)
        For i = LBound(strParamsArray) To UBound(strParamsArray)
    lstParams.AddItem strParamsArray(i)
        Next i
    End Sub
      

  4.   

    to  baoaya(点头) :有可能是这个问题。。
    我怀疑是VC返回的STRING数组是ANSI字符集的,而VB的string数组是unicode字符集的,不知道是不是这样??dll是用的别人的,没法改了。。能不能在VB这边想办法解决??
      

  5.   

    你看一下 这个函数支持不支持 汉字,如果不支持的话可能是使用 ANSI字符集这样的话 你使用byte 做为参数 调用getParamsArray,然后再使用 strconv 函数 转为unicode
      

  6.   

    看来只好这样了~~~~
    当时为了省事,用了个返回数组的dll,没想到却更麻烦了......
      

  7.   

    Dll 的问题,它在填充字符串数组时没有在末尾填充 '\0'。跟 ANSI、Unicode 没什么关系。本来 VB 是自动将数组或字符串清空的。但是,可能是 Dll 作者太懒,竟然不判断每一项的长度,而是将缓冲区悉数复制过来。如果 Dll 能事先将缓冲区全部写 0 也行。竟然全没做。在 VB 端怕是难办了。如果你知道所有可能参数的长度,自己处理一下吧。不过最好还是自己写一个 Dll。
      

  8.   

    原来是这样啊~~~
    看来需要和那个dll的作者交涉一下。。
      

  9.   

    to  of123() :VB 自动将数组或字符串清空是什么意思??能说得再详细点吗??
      

  10.   

    //VB 自动将数组或字符串清空是什么意思??能说得再详细点吗??就是 变量初始化,c++ 里 声明一个变量里面的值不为空 ,里面的数据是以前释放这个内存前的数据
      

  11.   

    哦~~明白了在VB这边也解决了...我先用len函数取每个元素的长度,然后用left函数取字符串...