function ShowSFZH(
         H: THandle;
         XZQH:String;
         Var SFZH:String):Integer;stdcall;export;这是我在dll里面定义的一个出口,H: THandle;XZQH:String;是两个输入参数,
即只负责把值传入;SFZH:String 是个输出参数,要把值传出来。
然后是如果这个函数执行成功返回1,错误返回0。现在问题是SFZH能把值传出来,但关闭调用它的主程序时,会出现异常错误。
不管你时静态还是动态调用,都会异常。为什么?我觉得应该可以设置输出参数的。

解决方案 »

  1.   

    啊,不是这样的啊~~我两边都是Delphi,
    用Delphi做dll,用Delphi用dll。应该不存在Pchar的问题。Pchar只是用来和其他开发工具共享的问题。
    比如Delphi做的dll要用到vc上,就只能用pchar型。但我不是这个问题。
      

  2.   

    那参数入栈顺序一致么?
    调用函数时有没有声明stdcall
      

  3.   

    有stdcall。SFZH能返回内容。表面上似乎没有问题,但我一关闭主程序,就异常~~~
      

  4.   

    确定在 program 和 library 文件的 uses 子句中都引用了 ShareMem 单元了吗,并且是第一个?
      

  5.   

    shareMem不是万能的。不要动不动就shareMem,青霉素也不是时时管用,用错了还会出人命的。
      

  6.   

    用Delphi也存在这样的问题,输出参数一定要用Pchar,没有理由
      

  7.   

    http://www.mastone.net/test/error.jpg
    我截取的图片
      

  8.   

    好吧,换个方式讨论。
    function或者Procedure后面所带参数,加var和不加var有什么不同?是不是加var的就可以传值出来,而不加var的只是只进不出?
      

  9.   

    加var是把变量的地址传进去了,在过程函数里会影响到变量的值;
    不加var是把变量的值传进去,所以就是只进不出了。