各位大哥请问const char *在DELPHI里用什么类型代替?能用Pchar吗?
我在调用一个DLL里的一个函数时,它里面的函数的原型是:InitSMGPAPI(const char *);请问我在DELPHI里怎么声明!谢谢!

解决方案 »

  1.   

    可以用PChar。const修饰符是针对编译器的,不是针对语言的。
    procedure InitSMGPAPI(yourParam: PChar); stdcall;
      

  2.   

    应该是可以用PChar来作为参数传递的。
      

  3.   

    Type InitSMGPAPI = procedure(const Some: PChar); 
    就OK了!
      

  4.   

    agree chechy
    procedure InitSMGPAPI(yourParam: PChar); stdcall;
      

  5.   

    各位大哥我像这样定义
    ////////////////////////////////////////
    function InitSMGPAPI(s:pchar):integer ; external 'D:\test\SmGwAPI.dll'  ;
    procedure TForm1.Button1Click(Sender: TObject);
    var
       p:pchar;
      i:integer;
    begin
      getmem(p,255);
      p:='D:\test\smgpc.ini';
     i:=InitSMGPAPI(p);
    end;
    ////////////////////////
    在调用时出错。出错信息是:
    project d:\test\project1.exe faulted whit message:'access violation at 0xxxe13164:write of address 0x0000eb01
      

  6.   

    function InitSMGPAPI(s:pchar):integer ;stdcall; external 'D:\test\SmGwAPI.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    var
       p:pchar;
      i:integer;
    begin
      getmem(p,255);
      p:='D:\\test\\smgpc.ini';
      i:=InitSMGPAPI(p);
      FreeMem(p);
    end;
      

  7.   

    你的调用方法有问题。
    先声明函数的类型:
    type
      func = function InitSMGPAPI(s:pchar):integer ;
    再调用:
    var moudle: THandle;
      PFunc: TFarProc;
      i: Integer;
    begin
      Moudle := Loadlibrary('h:\test\dll\Project1.dll');
      if Moudle>32 then
      begin
        Pfunc := GetProcAddress(Moudle,InitSMGPAPI);
        i := func(Pfunc)('a');
        ShowMessage(IntToStr(i));
      end;
      Freelibrary(Moudle);
    end;