呵呵,当然拉,你DLL中改为:StrPCopy(mss, 'Quit');调用程序改为:
procedure TForm1.Button1Click(Sender: TObject);
 var iRet:smallint;
     sPS:array[0..255] of char;
begin
   StrPCopy(sPS,'are you');
   iRet:=ss(sPs);
   edit1.text:=intTostr(iRet);
end;

解决方案 »

  1.   

    你记住一点,PChar类变量其实只是个指针,而指针在使用前一定要指向一个你自己分配的空间,无论你是静态分配的(用数组),还是动态分配的!否则很容易出现不可预知的错误的!!
      

  2.   

    type
       
      TSS = function(var yss:pchar):smallint;stdcall;
    var
      Form1: TForm1;
      HLibHandle: HModule;implementation
    {$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
     var iRet:smallint;
         sPS:PCHAR;
         ss:Tss;
    begin
        HLibHandle := LoadLibrary('Project2.dll');
        try
            @ss := GetProcAddress(HLibHandle,'ss');
            sPS:='are you';
            iRet:=ss(sPs);
            edit1.text:=intTostr(iRet);
       finally
           FreeLibrary(HLibHandle);
       end;
    end;end.
      

  3.   

    首先谢谢三位。
    to weizhi(行者) :
    照你的做法,在编译时iRet:=ss(sPs);行提示
    Types of actual and formal var parameters must be identicalto liusp(带着我的影子去流浪) :
    按你的做法还是问题如故:都是提示: 'Invalid Pointer Operation'
      

  4.   

    呵呵,你去掉DLL中和调用程序中,对函数参数中的Var,即,改为:
    DLL中
    function ss(mss:pchar):smallint;stdcall;export;调用程序中:
    function ss( yss:pchar):smallint;stdcall;external 'e:\delphidll\tmp\Project2.dll' name 'ss';
      

  5.   

    weizhi(行者) :
    编译是通过了,但执行后一样的出错。能否将代码放到你的机器上执行一下,我怀疑我的机器或delphi5是否有问题呢?
      

  6.   

    呵呵,你还要去掉DLL中的Uses部分的ShareMem; 如果你是用Pchar而没用String做为参数,就不要用ShareMem,而如果你DLL中要用它,必须将其放在第一行,即,可改为:uses
    //  ShareMem,   //如果加此行,则必须是在第一行的
      SysUtils,
      Classes;
      

  7.   

    To weizhi(行者) :
    正如你所说,现在可以了!很感谢你的帮助!呵呵