VB中调用c++ dll 返回wchart_t* 如何实现 例如 wchart_t*  TagName();  释放时调用 FreeString(wchart_t* pVal)
不是vb。net
在vb中如何调用此dll 

解决方案 »

  1.   

    wchart_t*  就是“宽字节字符指针“吧!应该就是一串UTF-16编码的字符串数据。
    这个API是不是还有一个返回参数,是代表字符数的?VB6的声明应该就是类似这样:
    Private Declare Function TagName Lib "XXXX.dll" ( ) as long 
    调用时,用一个Long类型变量接收返回值。
    要获取数据,就另外用一个字节数组或者String类型变量,通过API copymemory() 来拷贝。
    如果没有“长度”的返回参数或函数接口,那么它肯定就是用vbNullChar来标识结束的(wchart_t应该是用连续两字节0)。
    反正你要注意,在copymemory() 之前,字节数组或String变量,要先“开辟足够大的数据区”!
    接收TagName() 返回值的变量,是要用Byval 形式传递给copymemory。
      

  2.   

    还有个问题操作系统的filetime在VB中如何显示在文本框中
      

  3.   

    跟你说的差不多,我使用的strcpy
      

  4.   

    用strcpy也应该能达到效果。
    但同样要注意“事先开辟足够大的数据区”。
      

  5.   

    Private Declare Sub GetSystemTimeAsFileTime Lib "Kernel32" (ByRef lpSystemTimeAsFileTime As FILETIME)
      

  6.   

    跟你说的差不多,我使用的strcpy
    想到一个问题:strcpy是“A版”的API,你用它拷贝数据,很可能出现字符串不完整的情况。
    如果是UTF-16编码,那任意一个标准ASCII字符的第二个字符就是0,这样只要遇到西文字符,它就认为字符串已经结束了。
      只有在字符串不包含标准ASCII字符的情况下才适用。
    当然,如果这个wchart_t*指向的字符串是UTF-8编码的,也可以用strcpy来正确拷贝。