当前位置:首页 » 编程软件 » bcb工程编译Delhi代码

bcb工程编译Delhi代码

发布时间: 2023-05-18 09:45:39

1. win7 下BCB调用 BCB编写的DLL

1. 静态调用 DLL
使用 $BCB path\Bin\implib.exe 生成 Lib 文件,加入到工程文件中
将该文件拷贝到当前目录,使用宏轿 implib MyDll.lib MyDll.dll 生成
// Unit1.h // TForm1 定义
#include "DllForm.h" // TDllFrm 定义
//---------------------------------------------------------------------------
__declspec(dllimport) class __stdcall MyDllClass {
public:
MyDllClass();
void CreateAForm();
TDllFrm* DllMyForm;
};
extern "C" __declspec(dllimport) __stdcall void CreateFromFunct();

class TForm1 : public TForm{...}

// Unit1.cpp // TForm1 实现
void __fastcall TForm1::Button1Click(TObject *Sender)
{ // 导出类实现,导出类只能使用静态方式调用
DllClass = new MyDllClass();
DllClass->CreateAForm()
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ // 导出函数实现
CreateFromFunct();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete DllClass;
}
2. 动态调用 DLL
// Unit1.h
class TForm1 : public TForm
{
...
private: // User declarations
void (__stdcall *CreateFromFunct)();
...
}
// Unit1.cpp // TForm1
HINSTANCE DLLInst = NULL;
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if( NULL == DLLInst ) DLLInst = LoadLibrary("DLL.dll"); //上面的 Dll
if (DLLInst) {
CreateFromFunct = (void (__stdcall*)()) GetProcAddress(DLLInst,
"CreateFromFunct");
if (CreateFromFunct) CreateFromFunct();
else ShowMessage("Could not obtain function pointer");
}
else ShowMessage("Could not load DLL.dll");
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if ( DLLInst ) FreeLibrary (DLLInst);
}
3. DLL 作为 MDIChild (子窗体) 【只编写动态调用的例子】
实际上,调用子窗体的 DLL 时,系统只困梁是检查应蔽尺肆用程序的 MainForm 是否为 fsMDIForm 的窗体,这样只要把调用程序的 Application 的 Handle 传递给 DLL 的 Application 即可;同时退出 DLL 时也要恢复
// MDIChildPro.cpp // Dll 实现 CPP
#include "unit1.h" // TForm1 定义
TApplication *SaveApp = NULL;
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{

if ( (reason==DLL_PROCESS_DETACH) && SaveApp )

Application = SaveApp ; // 恢复 Application

return 1;
}

extern "C" __declspec(dllexport) __stdcall void TestMDIChild(
//1024X768

TApplication* mainApp,

LPSTR lpCaption)
{
if ( NULL == SaveApp ) // 保存 Application,传递 Application
{
SaveApp = Application;
Application = mainApp;
}
// lpCaption 为子窗体的 Caption
TForm1 *Form1 = new TForm1 ( Application, lpCaption );
Form1->Show();
}
注:上面的程序使用 BCB 3.0 编译成功
4. BCB 调用 VC 编写的 DLL
1. 名字分解:
没有名字分解的函数
TestFunction1 // __cdecl calling convention
@TestFunction2 // __fastcall calling convention
TESTFUNCTION3 // __pascal calling convention
TestFunction4 // __stdcall calling convention
有名字分解的函数
@TestFunction1$QV // __cdecl calling convention
@TestFunction2$qv // __fastcall calling convention
TESTFUNCTION3$qqrv // __apscal calling convention
@TestFunction4$qqrv // __stdcall calling convention<br

2. 一段C语言在BCB中编译的代码,求解释

char buffer[1024] = {0}; //定义并赋初值为全0
#pragma resource "*.dfm" //资源定义在各个dfm为扩展名的文件中
TForm1 *Form1; //定义一个指向TForm1窗体对象的指针
(->) 仿问指针所指对象的元素的访问运算符,与点(.)相对应,就是一个减号加一个大于号连写在一尺码起,使用类的指针,结构体指针和联合体指针,就经常会用到这个指向访问运算符啊,这个运算符可不是BCB特有的,是C语方和C++共有的,不认得它说明你C的基础不牢靠啊
#include <vcl.h> //包含头文件 vcl.h 它是什么库的头文件,我也不晓得咧
BCB与VC就所用的语言来讲都是标准的C/C++,没有区别,但是在资源的定义上,工程的处理上,窗体、资源与代码的关联上、集成环境的使用上都是完全不同的
BCB到6.0之后还有没有继续升级我不晓得,但是Bland公衫困塌司已尼倒闭不再有后继支持了,若不是手头还有旧的BCB项目要继续维护话,新手是没有必要学习使用BCB来开发了,windows下的C/C++编程用VS20XX系列够用了,旧到VC6,新到VS2011,学习或或圆开发都是可用的。

我最近五到六年里都一直只用VS2003(VC7.1),偶而也用BCB6.0(那是因为公司有一个旧项目是BCB开发的框架,做界面时是比VC7.1省事快捷此),在此之前,我还用了好多年的VC6和TC3.0呢,初学时我用的是TC2.0+DOS3.3/DOS6.22,现在我转行了,16位的32位和64位的都不做而改做8位的C51程序了,这是进化还是退化了呢? 呵呵,罗嗦太多了

热点内容
为什么说服务器已停止响应 发布:2025-07-16 00:29:36 浏览:390
python判断字符串是否为空 发布:2025-07-16 00:21:47 浏览:210
安卓转苹果用什么软件 发布:2025-07-16 00:21:45 浏览:627
安卓官服如何登ios 发布:2025-07-16 00:21:32 浏览:623
天龙抢店脚本 发布:2025-07-16 00:14:47 浏览:958
华为荣耀存储卡 发布:2025-07-16 00:10:40 浏览:659
mysql创建utf8数据库 发布:2025-07-16 00:04:08 浏览:105
开机系统用户名密码多少 发布:2025-07-16 00:03:58 浏览:692
成都高品质安全存储柜 发布:2025-07-15 23:45:38 浏览:56
页面算法操作系统 发布:2025-07-15 23:35:30 浏览:129