社区
C++ Builder
帖子详情
如何调用dll里面的窗体?
KimLeo
2006-09-28 11:47:32
dll里怎么设计啊?谁能给个例子。一个窗体一个按键,返回一个int就可以了。
谢谢。。。。
...全文
192
12
打赏
收藏
如何调用dll里面的窗体?
dll里怎么设计啊?谁能给个例子。一个窗体一个按键,返回一个int就可以了。 谢谢。。。。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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);
}
//---------------------------------------------------------------------------
MFC
调用
DLL
文件中的对话框.非模态形式
调用
DLL
文件中的对话框_一个
DLL
的能成功_一个
DLL
不能成功
Dll
DialogTest VS2010写的 一个基于对话框的MFC程序 然后创建两个常规动态
DLL
文件 在
DLL
文件中分别添加对话框 一个
DLL
的对话框能正常
调用
另一个不行 均为非模态
调用
.... C++
DLL
动态加载 生成窗口的方法
一个大的项目,经常要把程序模块化。 一般的模块化方法,例如把算法类,封装到
dll
中,再导出类给主EXE使用。或者
dll
封装函数,供主EXE
调用
接口函数。 再或者使用COM组件。 但是Windows程序经常有很多窗口,如何把窗口封装到
dll
中,并且能否动态加载。就不是MFC架构能解决了。 因为要用到扩展MFC导出
dll
类型,来导出窗口类,但是这样的话,必须用静态加载lib文件方式来实现。降低了灵活性。因为有可能某个窗口还在开发中,而其他的可以用,这时我们想让能用的跑起来,这时,需要动态加载
dll
。 可是动态加载
dll
又没有导出窗口类的机制,怎么办? 请看本资料。 由于时间关系,没有太多时间整理现在的代码。只提供了思路,因为我已经实现了,因此思路是可行的。并且很简单。
QT生成带界面的
dll
给c#
调用
本资源包括4个文件夹,myQtMainWindow
Dll
文件夹
里面
是qt的工程文件;build-qt
dll
-Desktop_Qt_5_12_2_MSVC2015_64bit-Release文件夹是qt编译生成的文件夹;QtRelease
Dll
文件夹
里面
是最重要的qtdialog.
dll
以及他所依赖的所有的库;CsharpUseQt
Dll
文件夹
里面
是c#工程。 具体使用细节参见我的博客:https://blog.csdn.net/weixin_43935474/article/details/105531814
c#语言如何
调用
c++编写的
dll
这是一个简单的demo。 实现用C++语言(编译器是msvc)编写的
dll
库,供C#应用程序
调用
。
里面
有两个解决方案: 1.“Project1”是用C++编写的
dll
库。简单的实现了一个加法运算。 2.“
调用
cpp”是用C#编写的
窗体
应用程序,
里面
实现了点击一个按钮后
调用
C++的
dll
库进行加法运算,并得到结果。 3.C++生成后到对应的目录,release或者debug目录(如果是用于生产,最好生成release文件),拷贝
dll
文件到c#项目的运行根目录下(也是debug或者release目录下)。
PB
调用
PB自己制作的COM组件
2010.7.2 在QQ朋友菠菜/yun(1216297)的引导下接触到了PB制作COM组件应用。 1、文件夹A下用COM的向导制作了一个不可视的object,制作了最简单的函数,最后打包成
dll
文件。 2、利用regsvr32注册了这个
dll
。 3、文件夹B下用ole方式
调用
这个
dll
,并
调用
里面
的方法,测试正常。 注意要点:经过测试可以
调用
普通函数取得返回值,而当
调用
函数中有open窗口的语句后,虽然也能打开窗口正常看到
窗体
中的控件,并且窗口的open事件也能成功执行,哪怕是dw中的数据也能正常显示。但是当鼠标点击任何控件都会报非法操作的提示,关闭窗口也是如此。而文本框的getfocus,losefocus,modify等事件也不会被触发。最后判断为PB
调用
PB制作的com组件时,只能
调用
非可视的object做的,而如果含有
窗体
的,就会经常报非法操作。估计是此种方法不被支持。 测试环境pb11,当A文件夹下程序编译成
dll
时如果报错,请删掉A目录下生成的没用的
dll
及其他文件,即可。 如果有哪位高人成功
调用
了PB下的可视化
窗体
又不会报错的,请不吝赐教,QQ联系方式如下。 Kair 2010.7.2 QQ:55092518
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章