dll原文
library Project2;
uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons,printers;{$R *.RES}
function test:integer;export;stdcall;
begin
showmessage('all right');
result:=0;
end;exports test;
begin
end.
引用:unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
............................//
............................//
var
  Form1: TForm1;
const
  dllpath='D:\Program Files\Borland\Delphi5\Projects\dlltest\Project2.dll';
implementation{$R *.DFM}
function test:integer;external dllpath name 'test';
procedure TForm1.Button1Click(Sender: TObject);
begin
test;
end;
根本就无法运行.提示非法访问地址,是不是dll函数的输出方法不对呀.

解决方案 »

  1.   

    代码:
    DLL
    uses
      SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
      Forms, Dialogs, StdCtrls, Buttons,printers;
    {$R *.res}function test:integer;export;stdcall;
    begin
      showmessage('all right');
      result:=0;
    end;exports test;begin
    end.APPLICATION:
    nterfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ShellApi, StdCtrls;type
      TForm1 = class(TForm)
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;const
      dllpath= 'E:\Program Files\Borland\Delphi6\Projects\DllTest\Project2.dll';
    implementation{$R *.dfm}function test:integer;external dllpath name 'test';procedure TForm1.Button2Click(Sender: TObject);
    begin
      test;
    end;end.
      

  2.   

    function test:integer; stdcall; external dllpath name 'test';
                             /\
                              |
      

  3.   

    帮忙看一下这个代码:
    unit printunit;interface
    uses
      SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
      Forms, Dialogs, StdCtrls, Buttons,printers; const INCHES_PER_MILIMETER: REAL =0.04;//打印字行间距
     TYPE
      toffset=record
        x,y:integer;
      end;
     var fdevicename:string;//打印机名称
         fpageheightpixel,fpagewidthpixel:integer;//页宽和页高
         forientation:tprinterorientation;
         fprinteroffsetpixels:toffset;
         fpixelspermmx,fpixelspermmy:real;
         mmsize,fpageheightmm:integer;
         thereport,thehead,headline,recordline,tfname,tlname:string;
     procedure getdevicesetting;
     function puttext(mmx,mmy:integer;s:string;leftalign:boolean):integer;
     function printfile(filename:string;fontsize:integer):integer;export;stdcall;implementation
    procedure getdevicesetting;
    var retval:integer;
        pixx,pixy:integer;
    begin
      fdevicename:=printer.Printers[printer.printerindex];
      //取得设备名称
      fpageheightpixel:=printer.PageHeight;
      fpagewidthpixel:=printer.PageWidth;
      forientation:=printer.Orientation;
      fprinteroffsetpixels.x:=getdevicecaps(printer.handle,physicaloffsetx);
      fprinteroffsetpixels.y:=getdevicecaps(printer.handle,physicaloffsety);
      retval:=escape(printer.handle,getprintingoffset,0,nil,@fprinteroffsetpixels);
      pixx:=getdevicecaps(printer.handle,logpixelsx);
      pixy:=getdevicecaps(printer.handle,logpixelsy);
      fpixelspermmx:=inches_per_milimeter*pixx;
      fpixelspermmy:=inches_per_milimeter*pixy;
      fpageheightmm:=round(fpageheightpixel/fpixelspermmy);
    end;function puttext(mmx,mmy:integer;s:string;leftalign:boolean):integer;
    var
      x,y:integer;
      align:word;
    begin
     if leftalign then
      align:=settextalign(printer.handle,ta_bottom or ta_left)
      else
      align:=settextalign(printer.handle,ta_bottom or ta_right);
      result:=-1;
      x:=trunc(mmx*fpixelspermmx)-fprinteroffsetpixels.x;
      y:=trunc(mmy*fpixelspermmy)-fprinteroffsetpixels.y;
      if x<0 then exit;
      if y<0 then exit;
      printer.Canvas.TextOut(x,y,s);
      result:=0;
    end;function printfile(filename:string;fontsize:integer):integer;
    var f:textfile;
        str:string;
        row:integer;
    begin
    row:=0;
    getdevicesetting;
    if fileexists(filename)then
     begin
      printer.BeginDoc;
      printer.Canvas.Font.Size:=fontsize;
      assignfile(f,filename);
      reset(f);
      while not eof(f) do
       begin
        readln(f,str);
        puttext(10,10*row,str,true);
        row:=row+1;
       end;
      printer.EndDoc;
      closefile(f);
     result:=0;
     end;
    end;end.
    ****************************************************
    ****************************************************
    library printdll;
    uses
      SysUtils,
      Classes,printers,
      printunit in 'printunit.pas';
    {$R *.RES}
    exports printfile;begin
    end.
    我在引用时就是报错,帮忙查一下.
      

  4.   

    谢谢alphax(迷惑,没有3个代表光有Delphi行么) ,就是缺了那么一个关键字,不知道那里有delphi关键字说明下载的地方