首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

如何创建一个用Show方式显示其窗口的DLL

2012-03-13 
怎么创建一个用Show方式显示其窗口的DLL? 如题:externC {__declspec(dllexport)__stdcallvoidCreateFrom

怎么创建一个用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();

}

}
}
//---------------------------------------

热点排行