library Project1;
uses
  SysUtils,  Classes;function testSt(N:String):String;stdcall;
begin
  result:='2';
end;exports
 testSt;
end.编译输出没有问题,但是在程序调用时却有问题,调用过程如下:implementation
function testSt(N:String):String;
stdcall;external'Project1.dll';procedure TForm1.Button3Click(Sender: TObject);
begin
   edit3.Text:= testSt('ffff');
end;总是提示使用的了非法的指针,为什么?如果将Dll函数改成function Double(N:Integer):Integer;stdcall;
begin
  result:=N*2;
end;这样就可以正常调用,这是什么原理?那为高兄指导一下,谢谢

解决方案 »

  1.   

    在Uses中加上ShareMem,放在第一个,调DLL的程序中也要加上,放在第一个
      

  2.   

    To: ljmanage(过客) 
    关于dll调用我也想在过程文件中加入,这样省得每个单元文件都的重复加入,但是如何加?ShareMem是什么意思?To:netwolfds(晓竹) 
    pchar和string有什么区别吗?为什么一定要用pchar?
      

  3.   

    在Dll中使用String类型,需要用到BorlandMM.dll进行内存管理,所以在Uses中应该加入ShareMem单元,如果不引用改单元的话,则String可以用PChar或者ShortString代替
      

  4.   

    你在过程中加也行,然后别的单元用该过程就行了,相当于该单元作为公用的,ShareMem的作用楼上的已经给你解释了