用CodeGear C++ Builder 2007编写dll程序(二)
2007-10-28 23:44
267 查看
这章主题是,编写支持VCL的DLL。
第一步:建立dll
建立dll工程。如下图选择
确定后,保存工程名为usevcldll,新增一个about窗体,一个usevcl单元:usevcl.cpp/usevcl.h,
在usevcl.h中的代码如下:
#include <vcl.h>
#include <StdCtrls.hpp>
#include "about.h"
extern "C" __declspec(dllexport) int __stdcall GetAKSControlType();
extern "C" __declspec(dllexport) const char * __stdcall GetAKSControlName();
extern "C" __declspec(dllexport) void __stdcall TestSetEditValue(TEdit * aEdit);
extern "C" __declspec(dllexport) TForm * __stdcall GetAboutForm(TForm * aOwner);
在usevcl.cpp中的代码如下:
int __stdcall GetAKSControlType()
{
return 1;
}
const char * __stdcall GetAKSControlName()
{
return "AKSControl_Demo";
}
void __stdcall TestSetEditValue(TEdit * aEdit)
{
aEdit->Text = "This is Set Edit Value!";
}
TForm * __stdcall GetAboutForm(TForm * aOwner)
{
TAboutBox * frm = new TAboutBox(aOwner);
return frm;
}
然后,编译即可。这时会生成usevcldll.dll和usevcldll.lib等文件。在这里我们使用的是动态装载dll,usevcldll.lib就暂时不用了。
第二步,动态调用dll
我们再新建一个vcl Forms Application程序,保存为testdll
然后在生入如下界面窗体
窗口定义如下:主界面头文件:unit2.h
class TForm2 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TEdit *Edit1;
TEdit *Edit2;
TLabel *Label1;
TLabel *Label2;
TEdit *Edit3;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
代码文件:unit2.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "XFrmMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
typedef int __stdcall (* FGetAKSControlType )();
typedef const char * __stdcall (*FGetASKControlName)();
typedef void __stdcall (*FTestSetEditValue)(TEdit * aEdit);
typedef TForm * __stdcall(*FGetAbout)(TForm * aOwner);
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
//
FGetAKSControlType GetAKSControlType;
FGetASKControlName GetASKControlName;
FTestSetEditValue TestSetEditValue;
FGetAbout GetAbout;
HINSTANCE dd;
dd = LoadLibrary("usevcldll.dll");
GetAKSControlType = (FGetAKSControlType)GetProcAddress(dd,"GetAKSControlType");
GetASKControlName = (FGetASKControlName)GetProcAddress(dd,"GetAKSControlName");
TestSetEditValue = (FTestSetEditValue)GetProcAddress(dd,"TestSetEditValue");
GetAbout = (FGetAbout)GetProcAddress(dd,"GetAboutForm");
Edit1->Text = GetAKSControlType();
Edit2->Text = GetASKControlName();
TestSetEditValue(Edit3);
TForm * frmAbout = GetAbout(this);
frmAbout->ShowModal();
delete frmAbout;
FreeLibrary(dd);
}
//---------------------------------------------------------------------------
代码完成后,将usevcldll.dll复制到debug或release目录下,运行它,结果如下
再按下button1,就会弹出about对话框,并设置Edit的值。
这样,我们就可以在dll中定使用vcl了,下一章,将讲述使用静态调用dll的方式,并且支持dll中的类!
第一步:建立dll
建立dll工程。如下图选择
确定后,保存工程名为usevcldll,新增一个about窗体,一个usevcl单元:usevcl.cpp/usevcl.h,
在usevcl.h中的代码如下:
#include <vcl.h>
#include <StdCtrls.hpp>
#include "about.h"
extern "C" __declspec(dllexport) int __stdcall GetAKSControlType();
extern "C" __declspec(dllexport) const char * __stdcall GetAKSControlName();
extern "C" __declspec(dllexport) void __stdcall TestSetEditValue(TEdit * aEdit);
extern "C" __declspec(dllexport) TForm * __stdcall GetAboutForm(TForm * aOwner);
在usevcl.cpp中的代码如下:
int __stdcall GetAKSControlType()
{
return 1;
}
const char * __stdcall GetAKSControlName()
{
return "AKSControl_Demo";
}
void __stdcall TestSetEditValue(TEdit * aEdit)
{
aEdit->Text = "This is Set Edit Value!";
}
TForm * __stdcall GetAboutForm(TForm * aOwner)
{
TAboutBox * frm = new TAboutBox(aOwner);
return frm;
}
然后,编译即可。这时会生成usevcldll.dll和usevcldll.lib等文件。在这里我们使用的是动态装载dll,usevcldll.lib就暂时不用了。
第二步,动态调用dll
我们再新建一个vcl Forms Application程序,保存为testdll
然后在生入如下界面窗体
窗口定义如下:主界面头文件:unit2.h
class TForm2 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TEdit *Edit1;
TEdit *Edit2;
TLabel *Label1;
TLabel *Label2;
TEdit *Edit3;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
代码文件:unit2.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "XFrmMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
typedef int __stdcall (* FGetAKSControlType )();
typedef const char * __stdcall (*FGetASKControlName)();
typedef void __stdcall (*FTestSetEditValue)(TEdit * aEdit);
typedef TForm * __stdcall(*FGetAbout)(TForm * aOwner);
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
//
FGetAKSControlType GetAKSControlType;
FGetASKControlName GetASKControlName;
FTestSetEditValue TestSetEditValue;
FGetAbout GetAbout;
HINSTANCE dd;
dd = LoadLibrary("usevcldll.dll");
GetAKSControlType = (FGetAKSControlType)GetProcAddress(dd,"GetAKSControlType");
GetASKControlName = (FGetASKControlName)GetProcAddress(dd,"GetAKSControlName");
TestSetEditValue = (FTestSetEditValue)GetProcAddress(dd,"TestSetEditValue");
GetAbout = (FGetAbout)GetProcAddress(dd,"GetAboutForm");
Edit1->Text = GetAKSControlType();
Edit2->Text = GetASKControlName();
TestSetEditValue(Edit3);
TForm * frmAbout = GetAbout(this);
frmAbout->ShowModal();
delete frmAbout;
FreeLibrary(dd);
}
//---------------------------------------------------------------------------
代码完成后,将usevcldll.dll复制到debug或release目录下,运行它,结果如下
再按下button1,就会弹出about对话框,并设置Edit的值。
这样,我们就可以在dll中定使用vcl了,下一章,将讲述使用静态调用dll的方式,并且支持dll中的类!
相关文章推荐
- 用CodeGear C++ Builder 2007编写dll程序(一)
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)good
- 用QT在Windows下编写dll程序
- C++ 编写dll程序
- windows下如何使用QT编写dll程序
- Windows下如何使用QT编写dll程序
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
- C#调用C++程序编写的dll
- 用C++ Builder编写Tray程序
- vs2008发布c编写的dll程序 初始化失败-0xc0150002
- 一步一步SharePoint 2007之三十:实现文档Event Handler(2)——编写Handler程序
- 编写DLL程序的步骤
- 用QT在Windows下编写dll程序
- Win7下使用VS2013编写的ActvieX在XP下注册提示:LoadLibrary("XXX.dll")失败-找不到指定的程序
- CodeGear C++ Builder 2007 弱弱的GuideLine,VCL Designer的画蛇添足的功能
- Windows下如何使用QT编写dll程序
- 国庆期间试用CodeGear C++ Builder 2007的感受
- 编写DLL程序方法(二)
- VS使用QT编写dll程序
- c#程序调用c++编写dll需要注意问题