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

freelibrary 的问题 找管家婆软件怎么使用

仓库管理软件版1楼: 我写了一个函数,动态调用链接库中的一个模式窗体,窗体没有问题,
在使用中,发现一个怪问题

我的代码如下:
function SWF2EXE(): boolean;
var
libHandle: THandle;
SWF2EXE: TSWF2EXE;
begin
libHandle := loadLibrary(''swfTools.dll'');
@SWF2EXE := getProcaddress(libHandle, ''SWF2EXE'');
SWF2EXE(Application.Handle);
//FreeLibrary(libHandle);
result := true;
end;

如果我使用
freelibrary(LibHandle)这句,当关掉窗体时,主程序就自动最小化.
而不起这句时,则没有问题,请问是什么原因?

2楼: DLL 中是否有对 Application.Handle 的操作? 如管家婆软件怎么使用

3楼: 要看SWF2EXE这个函数内怎么写的了。关闭窗口时会判断一个TCloseAction个属性,看看它的值是不是变成caMinimize了。你在窗体的关闭事件(FromClose)中加入一句Active:=caFree看看。

4楼: 因为你的SWF2EXE函数使用了主调程序的句柄作为参数,所以我猜想你的DLL里面应该是用这个句柄来同步DLL自己的句柄了。如果是这样的话,建议你的这个SWF2EXE函数在返回之前先把原先DLL自己句柄恢复回来。这样可以避免发生一些莫名其妙的问题(包括DLL窗体被隐藏或最小化等等)。另外在DLL窗体的OnClose事件里面写Active:=caFree有时其实并不能真正销毁窗体,如果是这样的话可以在SWF2EXE函数结束前用FreeAndNil过程来手动销毁窗体对象。

5楼: 參考一下這個:


procedure TfrmCallDLL.btnCallDLLClick(Sender: TObject);
var
LibHandle: THandle;
ShowForm: TShowForm;
begin
LibHandle := LoadLibrary(''RptDLL.DLL'');
try
if LibHandle = HINSTANCE_ERROR then
raise EDLLLoadError.Create(''Unable to Load DLL'');
@ShowForm := GetProcAddress(LibHandle, ''ShowForm'');
if not (@ShowForm = nil) then
ShowForm;
finally
FreeLibrary(LibHandle);
end;
end;

6楼: 帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯