type
  Tdes=procedure(var data :pchar;var key:pchar; readlen:integer )cdecl;procedure TForm1.Button1Click(Sender: TObject);
  var
    Handle:Thandle;
    FPointer:TFarProc;
    MyFunc: Tdes;
    p1,p2:String;
    p3:integer;
    buffer:pointer;
begin
      p1:='sss';
    p2:='123';
    p3:=3;    Handle:=LoadLibrary('des.dll');
    if Handle>0 then
    begin
      try
        FPointer:=GetProcAddress(Handle,PChar('des')); //获得函数地址
        if FPointer<>nil then
        begin
            MyFunc:=Tdes(FPointer);
            MyFunc(pchar(p1),pchar(p2),p3); //主要就是这句,传入一个数据p1后,C里要用这个地址回传,可我不知DELPHI怎么处理这种UN CHAR*型,
            edit1.text:=p1; //这开始报地址错
        end
        else
        messagebox(0,'Funtion Add not found','Warning',MB_OK);
      finally
         FreeLibrary(Handle);
       end;
     end
     else
        messagebox(0,'DllName not found','Warning',MB_OK);
end;

解决方案 »

  1.   

    p1,p2:array[0..255] of char;//长度不够再加
    ...
    MyFunc(pchar(p1),pchar(p2),p3);
      

  2.   

    pl : array [0..100] of char;MyFunc(@P1,...);
    试试。
      

  3.   

    不用转了
    MyFunc(p1,p2,p3);
      

  4.   

    p1,p2:pchar;
    不要用string;如果用string你一定要指定长度
      

  5.   

    getMem(p1, 1024);
    ....
    edit1.text:=strpas(p1); 注意是不是cdecl 的調用格式!!!
      

  6.   

    不对呀!!我改的
    type
      Tdes=procedure(var data :pchar;var key:pchar; readlen:integer )cdecl;
    procedure TForm1.Button1Click(Sender: TObject);
      var
        Handle:Thandle;
        FPointer:TFarProc;
        MyFunc: Tdes; 
        p3:integer;
        l1:PPoint;
        buffer:pointer;
       p1: array [0..100] of char;
       p2: array [0..100] of char;
       p5,p6:pchar;begin    p1:='sss';
        p2:='123';
        p3:=3;
        p5:=p1;
        p6:=p2;     Handle:=LoadLibrary('des.dll');
        if Handle>0 then
        begin
          try
            FPointer:=GetProcAddress(Handle,PChar('des')); //获得函数地址
            if FPointer<>nil then
            begin
                MyFunc:=Tdes(FPointer);
               MyFunc(p5,p6,p3);
                edit1.text:=strpas(p5);
            end
            else
            messagebox(0,'Funtion Add not found','Warning',MB_OK);
          finally
             FreeLibrary(Handle);
           end;
         end
         else
            messagebox(0,'DllName not found','Warning',MB_OK);
    end;