新手dll被载入后,主程序不响应
新手求助:dll被载入后,主程序不响应
本人刚学dll,自己试着写了一个dll之后,在主程序中调用dll,dll中的窗口正确显示了,但此时dll窗口是活动的,主程序窗口变成非活动窗口,并且不响应任何操作,变灰了。
我猜想,是不是dll此时占用了主程序进程,要让dll窗口和主程序窗口都能响应操作,必须新开线程呢?我还没试过在线程中调用dll窗口。
请各位大大告诉我这是什么原因?
------解决方案--------------------
dll的窗口是不是模态显示的?
------解决方案--------------------
模态显示是不行的,这样主窗体就处于禁用状态。改成Show方法就行了。
frmAbout->Show();
考虑到窗体的Z-Order问题,你可以将DLL中窗口的FormStyle设置成fsStayOnTop
本人刚学dll,自己试着写了一个dll之后,在主程序中调用dll,dll中的窗口正确显示了,但此时dll窗口是活动的,主程序窗口变成非活动窗口,并且不响应任何操作,变灰了。
我猜想,是不是dll此时占用了主程序进程,要让dll窗口和主程序窗口都能响应操作,必须新开线程呢?我还没试过在线程中调用dll窗口。
请各位大大告诉我这是什么原因?
- C/C++ code
void __fastcall TForm1::ShowDLLaboutClick(TObject *Sender) { HINSTANCE ins; ins = LoadLibrary("./dll/mkabout.dll"); try { if(ins == NULL) throw MyException("Can't Load Library!"); FARPROC proc; proc = GetProcAddress(ins,"_myAbout"); //一个什么也不做的form if(proc == NULL) { FreeLibrary(ins); throw MyException("Can't Get Proc Address!"); } proc(); if(!FreeLibrary(ins)) { throw MyException("Can't Free!"); } } catch (MyException &myException) { ShowMessage(myException.test); } }
------解决方案--------------------
dll的窗口是不是模态显示的?
------解决方案--------------------
模态显示是不行的,这样主窗体就处于禁用状态。改成Show方法就行了。
frmAbout->Show();
考虑到窗体的Z-Order问题,你可以将DLL中窗口的FormStyle设置成fsStayOnTop