dll里的窗体,ShowModal为什么出错呀?
不知道为什么 问题点数:0、回复次数:10Top
1 楼zliang2000(蝴蝶剑)回复于 2003-02-03 20:01:42 得分 0
may be it will be ShowModel!!!Top
2 楼ffww(疯子)回复于 2003-02-03 22:28:31 得分 0
//*********************************************
* 用 途:动态链接库的创建和使用 *
* 单 位:枫馨电脑工作室 *
* 时 间:2003-01-11 *
* 整 理:疯子 *
* 附 注:CB6下测试OK,采用静态链接方式 *
**********************************************//
一、在DLL中使用窗体。
1、FILE | NEW | OTHER | DLL Wizard,确认后产生以下代码:并将其保存为DLL.cpp
2、NEW | FORM新建一个窗体,在其上随便加几个控件。窗体名为DllFrm,并将其保存为DllForm.cpp.
3、NEW | TEXT,将其保存为DLL.h文件。编写代码如下:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef DllH
#define DllH
#include "DllForm.h"
class __declspec(dllexport) __stdcall MyDllClass
{
public:
MyDllClass();
void CreateAForm();
TDllFrm* DllMyForm;
};
extern "C" __declspec(dllexport)__stdcall void CreateFromFunct(); //全局函数
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
4、对应DLL.cpp文件代码应编写如下:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <vcl.h> //选择了使用VCL控件,否则可以删除该句。
#include <windows.h>
#include "Dll.h" //加上这几句
#include "DllForm.h"
USERES("Dll.res");
USEFORM("DllForm.cpp",DllFrm);
#pragma hdrstop
//---------------------------------------------------------------------------
// 系统自动产生的注释
//---------------------------------------------------------------------------
#pragma argsused
//动态链接库的入口函数,类似于main函数
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
MyDllClass::MyDllClass()
{
//构造函数在这里
}
//---------------------------------------------------------------------------
void MyDllClass::CreateAForm()
{
DllMyForm=new TDllFrm(Application);
DllMyForm->Show();
}
//---------------------------------------------------------------------------
void MyDllClass::CreateAForm()
{
DllMyForm=new TDllFrm(Application);
DllMyForm->Show();
}
//---------------------------------------------------------------------------
void __stdcall CreateFormFunct() //注意这个全局函数的声明
{
TDllFrm* DllMyForm2=new TDllFrm(Application);
DllMyForm2->Show();
}
//---------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
5、编译后系统自动生成mydll.dll文件,请在控制始模式下键入命令implib DLL.lib DLL.dll,生成DLL.lib文件。
6、新建一Application,在窗体上放置一Button按钮。然后在project | ADD project将DLL.LIB文件导入.并在其头文件中加入:
#include "DllForm.h" //因为有窗体,所以要加这句,如果没有就不必了。
__declspec(dllimport) class __stdcall MyDllClass
{
public:
MyDllClass();
void CreateAForm();
TDllFrm* DllMyForm;
};
extern "C" __declspec(dllimport)__stdcall void CreateFromFunct(); //注意这里变成了dllimport
7、在Button的点击事件中加入:
MyDllClass *DllClass=new MyDllClass();
DllClass->CreateAForm();
或者可以用这句代码: CreateFromFunct();效果都是一样的。
8、当然,在窗口关闭FormClose事件中不要忘了删除动态创建的指针:delete DllClass;
举一反三吧!!Top
3 楼lanren_me(阿波)回复于 2003-02-08 13:05:11 得分 0
以下可有可无,我用过很多窗体dll,都不用添加.
#include "DllForm.h" //因为有窗体,所以要加这句,如果没有就不必了。Top
4 楼lanren_me(阿波)回复于 2003-02-08 13:06:21 得分 0
再说了,加入是vb OR delphi 的dll,那还有.h文件???Top
5 楼hongliqiu(在火中)回复于 2003-06-26 14:26:25 得分 0
在 ffww(疯子)的程序中需要添加的。
因为他用到了
__declspec(dllimport) class __stdcall MyDllClass
{
public:
MyDllClass();
void CreateAForm();
TDllFrm* DllMyForm; //这个声明
};
Top
6 楼flyinger(风往北吹)回复于 2003-08-26 01:24:48 得分 0
垃圾!程序!Top
7 楼flyinger(风往北吹)回复于 2003-08-26 01:26:08 得分 0
我以前也写这种垃圾!你 可以看1
http://expert.csdn.net/Expert/topic/2157/2157261.xml?temp=7.764834E-02
Top
8 楼Behard(我爱天安门)回复于 2003-08-26 01:41:45 得分 0
ffww(疯子) 的程序很熟呀?
看了看;原来是《C++ Builder 应用开发大全》(for BCB3.0)上面的例程
也不能说是垃圾呀
^_^ 很经典的 BCB 书籍呀Top
9 楼ljianq(泉深水清)回复于 2003-08-26 11:42:21 得分 0
《C++ Builder 应用开发大全》上面关于MDI中使用Dll的例子,完全编译后,有问题。Top
10 楼sprewellkobe(我为软件狂!)回复于 2003-08-26 12:05:21 得分 0
呵呵,你错误在哪
把代码帖出来呀Top




