本来定义了一个函数,定义入下,其中用到了3个变参
function GetReg(ProName:PChar; var fGeneral:integer; var EndDate,Params:PChar):integer;
现在想把这个函数封装入dll中,如上定义,在调用时会出错,请教如何写才能在dll中实现变参?谢谢

解决方案 »

  1.   

    function GetReg(ProName:PChar; var fGeneral:integer; var EndDate,Params:PChar):integer; stdcall;
      

  2.   

    是只要在申明的时候加stdcall就可以了吗?导出和导入的时候要加吗?
      

  3.   

    试试
    function GetReg(ProName:PChar; var fGeneral:integer; var EndDate:PChar; var Params:PChar):integer;
      

  4.   

    目前只是实验函数,全部代码就是library SysEnabled;uses
      SysUtils, Classes;{$R *.RES}function GetReg(ProName:PChar; var fGeneral:integer; var EndDate,Params:PChar):integer;
    begin
      fGeneral := Ord(True);
      EndDate := FormatDateTime('yyyymmdd',Now);
      Params := '';
    end;exports
      GetReg;begin
    end.
      

  5.   

    调用的工程写了
    procedure GetReg(ProName:PChar; var fGeneral:integer; var EndDate,Params:PChar):integer;far; external 'SysEnabled.dll';procedure TForm1.Button1Click(Sender: TObject);
    var
      fGeneral:integer; 
      EndDate,Params:PChar
    begin
      GetReg(',',fGeneral,EndDate,Params);
      Edit1.Text := IntToStr(fGeneral)+'!'+EndDate+'!'+Params;
    end;
      

  6.   

    报错内容为:access violation at 0x00e02fdb:write of address 0x6013d5fc.
      

  7.   

    procedure GetReg(ProName:PChar; var fGeneral:integer; var EndDate,Params:PChar):integer;stdcall; external 'SysEnabled.dll';
    注意調用約定.再試試!
      

  8.   

    谢谢Randomize,Delphi下调用通了但是VC的程序来掉这个dll还是报错呢有TX知道为什么吗?怎么弄吗?
      

  9.   

    function GetReg(ProName:PChar; var fGeneral:integer; var EndDate,Params:PChar):integer; stdcall;
    调用的工程
    procedure GetReg(ProName:PChar; var fGeneral:integer; var EndDate,Params:PChar):integer;stdcall; external 'SysEnabled.dll';
    如果不给16为操作系统使用,可以不far
      

  10.   

    有人知道Delphi写的参数带var的dll,用VC怎么调用吗
      

  11.   

    你的dll中不能用var pchar变参,因为在你的代码中调用后这个pchar就指向dll中的内存变量了,而这个dll中的变量地址是vc写的exe中的非法地址。
    你必须做到在vc中分配内存然后在dll中将数据填入vc分配的内存中,不能在dll中改变该内存的地址和大小。
      

  12.   

    噢,道理明白了,可是我在Delphi中应该怎么写呢?Delphi的过程中好象不能以指针为参数类型啊!难道Delphi写的dll库不能和VC通用吗?