愚见:  用C编写函数时使用的是LPSTR,DELPHI中应当用PChar类型对应吧!(string与PChar处理上是不同的);  若使用DELPHI编写该函数,在使用DELPHI向导生成的DLL的主文件(.dpr)会有一段说明,当使用string类型做为参数传递时,需要在USES中加上sharemem单元来引用BORLNDMM.DLL的内存管理。  还有,此时的外部函数的调用声明可以使用STDCALL关键字。

解决方案 »

  1.   

    加 StdCall;
    function PassStr(para:string):longint; StdCall; external 'testdll.DLL';如果不行将StdCall改为cdecl;
    function PassStr(para:string):longint; cdecl; external 'testdll.DLL';好像不要far也可以.
      

  2.   


    library ProjectDLL;{%File 'longint'}uses
      ShareMem,
      SysUtils,
      Classes,
      Dialogs;function PassStr(pStr:Pchar):longint;stdcall;
      begin
        MessageDlg(pStr,mtInformation,[mbOK],0);
        Result:=1;
      end;{$R *.RES}
    exports
      PassStr;end.
     library ProjectDLL_;uses
      SysUtils,
      Classes,
      Dialogs;  function PassStr_(Str:String):longint;stdcall;
      begin
        ShowMessage(Str);
        Result:=1;
      end;{$R *.RES}exports
      PassStr_;
    end.调用函数单元:
      function PassStr(pStr:Pchar):longint;stdcall;external 'ProjectDLL.DLL';
      function PassStr_(Str:string):longint;stdcall;external 'ProjectDLL_.DLL';procedure TForm1.Button1Click(Sender: TObject);
    begin
      PassStr('PChar OK!');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      PassStr('String OK!');
    end;已经调试通过。
      

  3.   


        还有,当使用DELPHI向导建立自动化对象时,为接口添加一个方法,当在可视编辑环境下传递long类型参数时,导出的Delphi源代码文件的对应函数的参数类型为integer。    所以,建议你用integer类型的传递给VC看看,要不就干脆使用__int64(Delphi对应为int64)类型喽!
      

  4.   


        还有,当使用DELPHI向导建立自动化对象时,为接口添加一个方法,当在可视编辑环境下传递long类型参数时,导出的Delphi源代码文件的对应函数的参数类型为integer。    所以,建议你用integer类型的传递给VC看看,要不就干脆使用__int64(Delphi对应为int64)类型喽!
      

  5.   

    改为Stdcall或cdecl就可以了,可我实际工作调用的是一个非常复杂的dll,别人编的.共有100多个函数,每个最少有16个参数.我现在调的头都快大了,唉,还得做dll的人协调工作,真麻烦!!!拿分吧.多谢各位兄台!!