不要用string改用Pchar,就可以了!

解决方案 »

  1.   

    多谢mardyak,不过您可能没有试过类似的程序。
    根据我的经验,VB调用DELPHI,应使用STRING。说到底,STRING也是一个32位的指针,最后有NULL结尾。
    其次,我的程序必须要用STRING。原因如下:
    var
      s :array[1..0] of char;
      p:pchar;
      ss:string;
    ....
    这三种类型间的正确赋值方法如下:
      p:=@s;
      ss:=s;
    从上述语句可知,s的地址付给了PCHAR的变量。如果退出DLL,S的内存即被释放,如果再去操作P,非发生错误不可。(实际上,上述程序我已经实验过)而ss:=s的操作,是给ss分配一块内存,将s的内容复制到ss。
      由于我的程序里用了array[x..n]of char的类型,用PCHAR显然是不合适的。
      

  2.   

    感谢各位的帮助,我的问题已经解决。
    thirdapple:您可能未能理解我的意思,我是要把VB的参数传到DLL中,由DLL改写后传回来,所以不能用BYVAL。
    事实证明,我原先的推测是正确的。
    为了让大家一起提高,把我的方法介绍一下:
    VB声明STRING变量后,必须分配空间;DLL中,必须用STRCOPY方法将值复制到该参数,而不能直接赋值。至于我提到的array [x..n] of char,只有当起始下标是0的时候,才能与PCHAR兼容(事实上,这才是困扰我时间最长的问题)