当前位置:主页>仓库管理软件> 列表

Dll传递TApplication类,关闭程序时越界 找管家婆

记账软件版1楼: dll申明函数
procedure pLoadLang(var App: TApplication); stdcall;
在调用时,使用
App := application;
pLoadLang(App);
但是在关闭程序时,报错。

2楼: procedure pLoadLang(const AppWnd: THandle); stdcall;
begin
Application.Handle := AppWnd;
.......
end;
调用:
pLoadLang(Application.Handle); 如管家婆

3楼: 在释放的时候可能造成了Application的重复释放
在Dll的工程文件中加上这个

implementation




procedure ExitDLL(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := DLLApp;
end;
end;

initialization
DLLAPP := Application;
DLLProc := @ExitDLL;

end.

4楼: to :风林坡
我在调用的时候,handle传入的时候报错,为什么要申明为const呢
to:iamy
你的那段是加在dll里面吗,不知道加在那,加了以后我的编译就过不了了,好象是说找不到该函数的定义,我的所有函数和过程都报错了。

5楼: 类对象不能传给外部DLL!


你应该实用句柄来传递,就照“风林坡”说的来做就可以了!

6楼: 加在Dll的工程文件里
procedure ExitDLL(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := DLLApp;
end;
end;

initialization
DLLAPP := Application;
DLLProc := @ExitDLL;
主要是这一端

记账软件版7楼: 当然你可以不用声明为const

8楼: 多人接受答案了。