小弟第一次学做dll(动态链接库),怎么编译不过去,还请高手指教! (20分)

  • 主题发起人 xiaoxiami0
  • 开始时间
X

xiaoxiami0

Unregistered / Unconfirmed
GUEST, unregistred user!
library Project2;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
SysUtils,
Classes,
dialogs,
Unit_2 in 'Unit_2.pas' {fm_main};

{$R *.RES}

function add(i:integer;j:integer):integer;
begin
result:=i+j;
showmessage(inttostr(result));
end;

function showmainform(ahandle: Thandle):boolean;stdcall;
begin
result:=true;
application.handle:=ahandle;
with tfm_main.create(nil) do try
showmodal;
finally
free;
end;
end;

exports
add,showmainform;

end.

光标在第二个函数的Thandle处停止了,是怎么回事啊?我建立了一个name为fm_main的窗体。
 
这样声明一下,试试看
function showmainform(ahandle: Thandle):boolean;stdcall;export;
 
paulannar大侠:
在哪声明啊?好象不好使啊。
 
这样改一下呢:
application.handle:=ahandle;
tfm_main:=Ttfm_main.create(application);
with tfm_main do try
showmodal;
finally
free;
end;
 
加上forms引用。
 
library Project2;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
SysUtils,
Classes,
dialogs,
forms,
fm_main所在的单元名, {!!!!你要把这个替换掉。}
Unit_2 in 'Unit_2.pas';

{$R *.RES}

function add(i:integer;j:integer):integer;
begin
result:=i+j;
showmessage(inttostr(result));
end;

function showmainform(ahandle: Thandle):boolean;stdcall;
begin
result:=true;
application.handle:=ahandle;
with tfm_main.create(nil) do try
showmodal;
finally
free;
end;
end;

exports
add,showmainform;

end.

 
showmainform 不是关键字吗?那应该override
 
都错了,uses中加上windows!
 
多人接受答案了。
 
不可能!!!
 
顶部