如何调用dll里面的窗体?

KimLeo 2006-09-28 11:47:32
dll里怎么设计啊?谁能给个例子。一个窗体一个按键,返回一个int就可以了。
谢谢。。。。
...全文
184 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
KimLeo 2006-09-29
  • 打赏
  • 举报
回复
BlueDeepOcean(蓝色·深海) ( ) 信誉:100 Blog 2006-09-28 17:07:00 得分: 0
我晕死。你如果调用动态生成的窗体,则所有动态组件的事件也需要自定义的。没有自定义,怎么能够让它动作呢?
哈哈,我说得真不清楚,不过我已经在网上找到我所需要的例子了

建立vcl的dll
选c++ 和 Use VCL。
加入新的窗体,并在dll的dll.cpp文件里加上该窗体的头文件NewForm.h
可以在NewForm里面象其它窗体一样加载控件。。(其实我要的是这个功能。。。嘻嘻。。。
在NewFOrm.h中,加入
***********************************************************
extern "C" __declspec(dllexport) void __stdcall NewForm();
***********************************************************
在dll.cpp里加入
***********************************************************
void __stdcall NewForm()
{
TNewFOrm *fm = new TNewFOrm(NULL);
fm->ShowModal();
delete fm;
fm=NULL;
}
***********************************************************
jaffy 2006-09-29
  • 打赏
  • 举报
回复
他希望窗体设计可以由IDE来完成
KimLeo 2006-09-28
  • 打赏
  • 举报
回复
不好意思。。。我没有说清楚!!!
调用dll里面的窗体,窗体包含一个按键,返回int。。。
BlueDeepOcean 2006-09-28
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4949/4949455.xml?temp=.9093897
http://community.csdn.net/Expert/topic/4842/4842059.xml?temp=.133877
BlueDeepOcean 2006-09-28
  • 打赏
  • 举报
回复
我晕死。你如果调用动态生成的窗体,则所有动态组件的事件也需要自定义的。没有自定义,怎么能够让它动作呢?
KimLeo 2006-09-28
  • 打赏
  • 举报
回复
或者使用 fm->ShowModal();
也就只是显示Form2大小的空白窗体啊,里面的button及它的其他事件都没有了。
BlueDeepOcean 2006-09-28
  • 打赏
  • 举报
回复
啊,我看错了,以为说我。楼主的调用出现问题了,你既然已经delete了,那怎么还能存在窗体呢?!
BlueDeepOcean 2006-09-28
  • 打赏
  • 举报
回复
我哪里delete了?你看看好再说:

extern "C" __declspec(dllexport) int __stdcall MyDLLFunc(void)
{
int i = 0;

TForm *dynamic_form = new TForm(Application);
dynamic_form->Caption = "Dynamic Form";
dynamic_form->Width = 100;
dynamic_form->Height = 100;
dynamic_form->Left = 100;
dynamic_form->Top = 100;

i ++;

TButton *dynamic_button = new TButton(Application);
dynamic_button->Parent = dynamic_form;
dynamic_button->Caption = "Dynamic Button";
dynamic_button->Width = 50;
dynamic_button->Left = 25;
dynamic_button->Show();

dynamic_form->Show();

i ++;

return i;
}
BenLeak 2006-09-28
  • 打赏
  • 举报
回复
extern "C" __declspec(dllexport) int __stdcall MyDLLFunc(void)
{
TForm *fm = new TForm(TForm2);
fm->Show();
delete fm;
fm=NULL;
return 2;
}
一调用,只见一闪而过。。。我是菜鸟来的,我想用已经建好了的窗体,xixi....

new/show 没有问题,但是你马上就 delete 了,肯定是一闪而过
你有两种方式修改:删除代码中的的
delete fm;
fm=NULL;(需要在Form 的FormClose函数中加上 Action = caFree; )
或者使用 fm->ShowModal();
BlueDeepOcean 2006-09-28
  • 打赏
  • 举报
回复
晕!
你那是什么呀!你调用错了!
上面的写在DLL中,后面的调用过程写在一个窗体的按钮事件中。
KimLeo 2006-09-28
  • 打赏
  • 举报
回复
extern "C" __declspec(dllexport) int __stdcall MyDLLFunc(void)
{
int i = 0;

TForm *dynamic_form = new TForm(Application);
dynamic_form->Caption = "Dynamic Form";
dynamic_form->Width = 100;
dynamic_form->Height = 100;
dynamic_form->Left = 100;
dynamic_form->Top = 100;

i ++;

TButton *dynamic_button = new TButton(Application);
dynamic_button->Parent = dynamic_form;
dynamic_button->Caption = "Dynamic Button";
dynamic_button->Width = 50;
dynamic_button->Left = 25;
dynamic_button->Show();

dynamic_form->Show();

i ++;

return i;
}
比如我的Form2已经建好了。。。
extern "C" __declspec(dllexport) int __stdcall MyDLLFunc(void)
{
TForm *fm = new TForm(TForm2);
fm->Show();
delete fm;
fm=NULL;
return 2;
}
一调用,只见一闪而过。。。我是菜鸟来的,我想用已经建好了的窗体,xixi....
BlueDeepOcean 2006-09-28
  • 打赏
  • 举报
回复
DLL

//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) int __stdcall MyDLLFunc(void)
{
int i = 0;

TForm *dynamic_form = new TForm(Application);
dynamic_form->Caption = "Dynamic Form";
dynamic_form->Width = 100;
dynamic_form->Height = 100;
dynamic_form->Left = 100;
dynamic_form->Top = 100;

i ++;

TButton *dynamic_button = new TButton(Application);
dynamic_button->Parent = dynamic_form;
dynamic_button->Caption = "Dynamic Button";
dynamic_button->Width = 50;
dynamic_button->Left = 25;
dynamic_button->Show();

dynamic_form->Show();

i ++;

return i;
}

调用:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int j;

typedef int __stdcall (*MyDLLFunc)();
HMODULE hModule = LoadLibrary(AnsiString("Project1.dll").c_str());
if (hModule)
{
MyDLLFunc t = (MyDLLFunc)GetProcAddress(hModule,"MyDLLFunc");
j = t();
}
ShowMessage (j);
}
//---------------------------------------------------------------------------

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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