我刚学dll,有些东西不很清楚
下面工程中的问题还请大家多多帮忙,
我的目的是想在外部程序中调用show以显示窗体,调用HextoDec以计算并显示结果,调用free以关闭并释放窗体,奈何编译却总是出错
出错的地方我已经注释出来了,不知该怎么修改,请大家多多指教!工程文件:
LIBRARY Project1;uses
  SYSUTILS,
  CLASSES,
  Unit1 in 'Unit1.pas' {Form1};{$R *.RES}
EXPORTS
  show,
  free,
  HextoDec;begin
end.单元文件:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure view(s:string;memo:Tmemo);
  end;var
  Form1: TForm1;
  function HextoDec(Hex:string):longint;EXPORT;
  procedure show();EXPORT;
  procedure free();EXPORT;
implementation{$R *.DFM}procedure TForm1.view(s:string;memo:Tmemo); //显示结果
begin
  memo.text:=memo.text+s+'  ';
end;procedure show(); //创建窗体并显示之
begin
  FORM1:=tfORM1.Create(APPLICATION);
  form1.Show;
end;procedure free();//释放窗体
begin
  form1.free;
end;function HextoDec(Hex:string):longint;   //十六制转化为十进进制
var i,j,len:integer;
    rusl,sqr,int:longint;
begin
  len:=length(Hex)-1;
  rusl:=0;
  for i:=0 to len do
    begin
      sqr:=1;
      for j:=1 to len-i do
        sqr:=16*sqr;
    case pchar(Hex)[i] of
      'A','a':int:=10;
      'B','b':int:=11;
      'C','c':int:=12;
      'D','d':int:=13;
      'E','e':int:=14;
      'F','f':int:=15;
    else
      int:=strtoint(pchar(Hex)[i]);
    end;
    rusl:=rusl+int*sqr;
    end;
  view(inttostr(rusl),memo1);//编译出错出处 [Error] Unit1.pas(63): Undeclared identifier: 'view'
                             //             [Error] Unit1.pas(63): Undeclared identifier: 'memo1'
                             //             [Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'
  HextoDec:=rusl;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Free;
end;end.

解决方案 »

  1.   

    with form1 do
         view(inttostr(rusl),memo1);
      

  2.   

    form1.view(inttostr(rusl),form1.memo1);
      

  3.   

    看一看《Delphi5开发人员指南》,你的问题就解决了!!!
      

  4.   

    谢谢大家,让我受益匪浅
    hkbarton(宁静至远||淡泊明志):你好
    我想您开得比较全面,能否解释一下dll中的接口函数和它的内部函数(变量)
    之间相互调用时应注意的问题吗?再次谢过!
      

  5.   

    《Delphi5开发人员指南》138元/本
      

  6.   

    呵呵,才看到。其实接口函数和内部函数在代码上就是export了而已,调用也没什么特别的地方(或许我不知道?)
    你刚才的代码由于export的都是定义在接口部分的var里的,而你要调用的函数和那个memo都是写在tform里的,所以应该加上form1.
    不知道,对不对,dll在平时编程时很少用(都是些小程序),所以还听听高手怎么说
      

  7.   

    function HextoDec(Hex:string):longint;stdcall;
      procedure show();stdcall;
      procedure free();stdcall;声明改改