先用VC++写dll:
---------------------------------------------
代码:
extern "C"{
int __declspec (dllexport)add (int a,int b)
{
return a+b;
}
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
return TRUE;
}
生成RELEASE版本dll文件和lib文件(这里我们在BCB中不用VC++的头文件,lib没有什么用处)
dll文件名:vcplusplusdll.dll
-----------------------------------------------------------------------
打开BCB,在默认新建的工程中放三个编辑框,用BCB默认添加的3个成员名:TEdit1,TEdit2,TEdit3.再添加一个按钮,更改caption为:OK。
在默认的TForm1类声明头文件中的public部分或private部分加入3个成员变量,int a,b,c。
为TEdit1,TEdit2 2个控件添加onchange响应函数,命名为onchange1,onchange2。
相关代码:
void __fastcall TForm1::change1(TObject *Sender)
{
a=StrToInt(Edit1->Text);
}
void __fastcall TForm1::change2(TObject *Sender)
{
b=StrToInt(Edit2->Text);
}
在Unit1.cpp文件中,TForm1的类函数的实现部分前面,添加一下全局变量:
HINSTANCE handle; //装载dll的模块句柄
FARPROC lpFarProc; //指向dll模块中函数地址的指针
int (*lpaddit)(int,int); //自己声明的一个和dll中的函数一样功能的函数原型
下面双击刚才添加的“OK”,BCB生成响应函数:在函数体内加入:
//load library
handle=LoadLibrary("vcplusplusdll.dll");
//get ptr point to the "ADD" function 's address
lpFarProc = GetProcAddress(handle,"add");
lpaddit = (int(_cdecl *)(int, int))lpFarProc; //指针类型转换
c=lpaddit(a,b); //使用addit函数
FreeLibrary(handle);
AnsiString str;
str=IntToStr(c);
Edit3->Text=str;
把VC++中的得到的dll拷贝到刚才bcb的工程的目录下,运行程序。通过~