procedure TForm1.FormCreate(Sender: TObject);
var
  srcKey,desValue:string;
  tmp:Pchar;
begin
    srcKey:=GetRegStr('BsDataProvider');
    Base642TextA(Pchar(srcKey),tmp,1);  //tmp 没有值啊,如果是变参,那在你的函数声明中并没有体现啊~~procedure Base642TextA(srcBase:LPCSTR;desText:LPSTR;flag:DWORD);far;External 'DMPUBAPI.dll';
//是否用var来声明 destest呢??

解决方案 »

  1.   

    procedure TForm1.FormCreate(Sender: TObject);
        var
            srcKey,desValue,temstr:string;
            tmp:Pchar;
    begin
        srcKey:=GetRegStr('BsDataProvider');
        tmp:=@temstr[1];
        Base642TextA(Pchar(srcKey),tmp,1);  //自注:程序运行到这儿出错
        desValue:=Trim(temstr);
        //MessageBox(handle,desValue,'ss',MB_ICONINFORMATION);end;
      

  2.   

    tmp: array [1..20] of char;Base642TextA(Pchar(srcKey),tmp,1);或者动态分配一部分空间给tmp,也行因为pchar的时候没有分配存储空间,所以访问出错
      

  3.   

    procedure Base642TextA(srcBase:LPCSTR;desText:LPSTR;flag:DWORD);far;External 'DMPUBAPI.dll';
    改成
    procedure Base642TextA(srcBase:pchar;desText:pchar;flag:longint);stdcall;far;External 'DMPUBAPI.dll' name 'Base642TextA';
    试试看
      

  4.   

    可能和参数的传递的顺序有关
    在dll中的函数后面加上stdcall
    试试看