怎么创建一个用Show方式显示其窗口的DLL?
如题:
extern "C "
{
__declspec(dllexport) __stdcall void CreateFromFunct(Param &s_dll);
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------
void __stdcall CreateFromFunct(Param &s_dll)
{
Form_dmain = new TForm_dmain(s_dll.Owner);
Form_dmain-> ShowModal();
delete Form_dmain;
}
上面的方式 Form_dmain-> ShowModal();
这样,主程序就需要等Form_dmain-> ShowModal();关闭并返回.
能不能让它 Form_dmain-> Show(); 然后函数返回主程序时,Form_dmain仍然存在呢?
[解决办法]
void __stdcall CreateFromFunct(Param &s_dll)
{
if (Form_dmain == NULL)
Form_dmain = new TForm_dmain(s_dll.Owner);
Form_dmain-> Show();
}
void __stdcall CloseFromFunct()
{
delete Form_dmain;
Form_dmain = NULL;
}
[解决办法]
窗体ShowModal()后不需要delete的吧
直接在Show出来的窗体的onclose事件里写Action = caFree;应该效果是一样的
[解决办法]
都是好方法,偶只管接分
[解决办法]
DLL页面
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h "
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm2 *Form2;
//---------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
extern "C " void __export msg1()
{
ShowMessage( "没有参数的 ");
}
extern "C " void __export msg2(String str)
{
ShowMessage(str);
}
extern "C " void __export msg3()
{
TForm2 *form = new TForm2(Application);
form-> ShowModal();
}
调用页面
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h "
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String dllname;
if (OpenDialog1-> Execute())
{
dllname = OpenDialog1-> FileName;
HINSTANCE ins;
ins = LoadLibrary(dllname.c_str());
if (ins ==NULL)
{
ShowMessage( "can 't ");
}
else
{
FARPROC proc;
proc = GetProcAddress(ins, "_msg1 ");
if (proc == NULL )
{
FreeLibrary(ins);
}
else
{
proc();
}
proc = GetProcAddress(ins, "_msg2 ");
typedef void (*FUNC)(String);
FUNC afunc = (FUNC)proc;
afunc( "mgsg ");
proc = GetProcAddress(ins, "_msg3 ");
proc();
}
}
}
//---------------------------------------