300分求 DLL导出函数返回DLL中窗体实例(int)frmXXX, 请问如何在EXE中如何利用返回的这个整型SHOW出窗体?

Jinwmmail 2007-12-24 09:26:05
问题解决另开2帖给分,决不食言.

DLL:
extern "C" int __declspec(dllexport) __stdcall CreateSForm(HWND ahWnd);
int __stdcall CreateSubForm(HWND ahWnd,int FormCode,HWND chWnd,char *MidCode)
{
Application->Handle=ahWnd;
Form1=new TForm1(Application);
return (int)FrmUnit1; // 小弟菜,请问这个返回的什么? 内存地址..?
}

EXE:
HINSTANCE DLLInst;
int (__stdcall *CreateSubForm)(HWND ahWnd);

//---------------------------------------------------------------------------
void __fastcall TFrmMain::Button1Click(TObject *Sender)
{
if( NULL == DLLInst ) DLLInst = LoadLibrary("A\\ADLL.dll");
(FARPROC &)CreateSForm=GetProcAddress(DLLInst,"CreateSForm");
int i=CreateSForm(Application->Handle,100100100,FrmMain->Handle,"100100100");
//这个i可以得到,怎样通过这个i Show 出这个窗体?
}
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
WYJBCB 2008-01-23
  • 打赏
  • 举报
回复
mark
Jinwmmail 2007-12-24
  • 打赏
  • 举报
回复
sczyq 代码调试通过.
多谢 sczyq

我主要是想在EXE中建一个对象列表,存放已New 出来的窗体,控制其只运行一个实例.
多谢 lihongbin33 的建议,我在 DLL 中 FormClose 事件中 Active=caFree;

请到
http://topic.csdn.net/u/20071224/11/049c726f-0b91-43e8-9843-98a84b9ad1cd.html

http://topic.csdn.net/u/20071224/11/b2a747ab-1e12-4ab0-aea5-519a9241fbce.html

回贴我好结贴.
lihongbin33 2007-12-24
  • 打赏
  • 举报
回复
楼上已经给出了正确答案!! 但是,还要注意new出来的指针 要注意释放!....
sczyq 2007-12-24
  • 打赏
  • 举报
回复
DLL: 
extern "C" int __declspec(dllexport) __stdcall CreateSubForm(TApplication * AOwner, int AParam);
int __stdcall CreateSubForm(TApplication * AOwner, int AParam)
{
Form1 = new TForm1(AOwner);
// AParam 参数到底怎么用,自己写吧
return (int)Form1 // 怎么可以使用 FrmUnit1 ?
}

EXE:
HINSTANCE DLLInst;

//---------------------------------------------------------------------------
void __fastcall TFrmMain::Button1Click(TObject *Sender)
{
int (__stdcall *CreateSubForm)(TApplication *, int); // 我喜欢在内部声明。
if( NULL == DLLInst ) DLLInst = LoadLibrary("A\\ADLL.dll");
(FARPROC) CreateSForm = GetProcAddress(DLLInst,"CreateSForm");
int i = CreateSForm(Application, 100100100);
//这个i可以得到,怎样通过这个i Show 出这个窗体?
TForm *Form = (TForm *)(void *)i;
Form->Show();
}
ydlchina 2007-12-24
  • 打赏
  • 举报
回复
(FARPROC &)CreateSForm=GetProcAddress(DLLInst,"_CreateSForm"); //看
laowang2 2007-12-24
  • 打赏
  • 举报
回复
顶。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧