//调用单元
unit TestF;

function EnterParamFormCreate(Ahandle: Thandle; var PStartDate,PEndDate: Pchar):Boolean;
  stdcall; external 'Ideal.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  Ahandle: Thandle;
  PStartDate,PEndDate: Pchar;
  StartDate,EndDate: String;
begin
  Ahandle:= Application.Handle;
  EnterParamFormCreate(Ahandle,PStartDate,PEndDate);
  StartDate:=PStartDate;
  EndDate:= PEndDate;
  Showmessage(StartDate+','+EndDate);
end;//dll
library Ideal;function EnterParamFormCreate(Ahandle: THandle;
  var PStartDate,PEndDate: Pchar):Boolean; stdcall;
begin
  Application.Handle:= AHandle;
  ImportParamForm := TFrmImportParam.Create(Application);
  with ImportParamForm do
  begin
    if ShowModal = mrOK then
    begin
      PStartDate:= Pchar(DateToStr(DateTimePicker1.Date));
      PEndDate:= Pchar(DateToStr(DateTimePicker1.Date));    end;
    Free;
  end;
end;exports
  EnterParamFormCreate;
begin
end.而当两个参数赋值字符串时,如
pstartdate:= 'aaa';
penddate:= 'bbb';
就能取回,请指导。

解决方案 »

  1.   

    一下子也看不出什么问题,你既然有返回值,最好给加上return 是吧
    明天我会公司,帮你调一下
      

  2.   

    别用pchar()用strCopy()strCopy(PStartDate,Pchar(DateToStr(DateTimePicker1.Date));
      

  3.   

    to shuyi(舒易)
    能讲一下为什么吗?同时,
    用strCopy()时为什么会出现无效地址错误呢
      

  4.   

    with ImportParamForm do
      begin
        if ShowModal = mrOK then
        begin
          PStartDate:= Pchar(DateToStr(DateTimePicker1.Date));
          PEndDate:= Pchar(DateToStr(DateTimePicker1.Date));    end;
        Free;
      end;
    //你这段代码创建了一个窗体
    //窗体上面有时间控件?
    //然后返回他们的时间?
    //是不是这个意思
      

  5.   

    StartDate:=String(PStartDate);
      EndDate:= String(PEndDate);把这两句改成这样试一试!!!
      

  6.   

    用Now不就可以返回了,干吗用那么多空间,如果真要这样返回
    可以在窗体上放个按钮
    你的窗体是ShowModal的,你的
    PStartDate:= Pchar(DateToStr(DateTimePicker1.Date));
    PEndDate:= Pchar(DateToStr(DateTimePicker1.Date));
    语句,在窗体关闭了以后再执行,当然访问不到这个数据了。
      

  7.   

    to zsy_good(只要坚定不移的走下去,那一定会成功) 
    1.我要返回两个人工指定的日期参数;
    2.在如下代码中,同样是ShowModal的,返回参数是没有问题的
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        function GetDate(var PStartDate,PEndDate: Pchar): Boolean;
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      PDate1,PDate2: Pchar;
      Date1Str,Date2Str: String;
    begin
       GetDate(PDate1,PDate2);
       Date1Str:= PDate1;
       Date2Str:= PDate2;
       showmessage(Date1Str+','+date2Str);
    end;function TForm1.GetDate(
      var PStartDate,PEndDate: Pchar):Boolean;
    var
      Form2: TForm2;
    begin
      Result:= True;
      Form2 := TForm2.Create(Application);
      with Form2 do
      begin
        if ShowModal = mrOK then
        begin
          PStartDate:= Pchar(DateToStr(DateTimePicker1.Date));
          PEndDate:= Pchar(DateToStr(DateTimePicker2.Date));
        end;
        Free;
      end;
    end;end.
      

  8.   

    to allan2002(丸子)
    谢谢你的建议,但是问题没有出在类型转换上,而是出在参数的传递过程中(:
      

  9.   

    你的代码我试过了没问题啊,是不是PStartDate:= Pchar(DateToStr(DateTimePicker1.Date));PEndDate:= Pchar(DateToStr(DateTimePicker2.Date));
      

  10.   

    to findya(满地找牙)
    你运行后showmessage()有没有返回两个数据?