请问在C++ Builder中如何调用delphi编写的dll?(急)(50分)

  • 主题发起人 主题发起人 lzjnuaa
  • 开始时间 开始时间
//项目1: 在Delphi中的DLL实现
library MyDLL;
uses
SysUtils,
Classes;
{$R *.res}
function GetDateTime(Buffer: PChar): Integer;
begin
StrCopy(Buffer, PChar(FormatDateTime('yyyy.mm.dd hh:mm:ss', Now)));
Result := 123;
end;

exports
GetDateTime;
begin
end.

//项目2: 在C++ Builder中的DLL调用
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
typedef int (__stdcall *_GetDateTime)(char *);
HINSTANCE hDLL;
_GetDateTime GetDateTime;
char sBuf[50]="";
int rs;
hDLL = LoadLibrary("MyDLL.dll");
if (hDLL){
GetDateTime = (_GetDateTime)GetProcAddress(hDLL, "GetDateTime");
if (GetDateTime){
rs = GetDateTime(sBuf);
ShowMessage(Format("函数调用结果: /n日期: %s, 返回值: %d",
ARRAYOFCONST((sBuf, rs))));
}else
MessageBox(Handle, "函数导入失败!", "DLL调用" ,MB_ICONERROR);
}else
MessageBox(Handle, "加载动态链接库失败!", "DLL调用", MB_ICONERROR);
FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
 
多谢了
还有一问题
我在delphi中有一dll
type
PDatabase = ^TDatabase;
proceduredo
Update(get_database:PDatabase);export;
var get_db:TDatabase;
begin
get_db:=TDatabase.Create(nil);
get_db.handle:=get_database^.handle;
~~~~~~~~~~~~~~~~~~~这里有问题
end;

在CB中调用
typedef void __stdcall __export (*TdoUpdate)(TDatabase *post_database);
想把Tdatabase传递到dll中去,请问这样传递问题出在哪里?
 
你先把dll导成 .def 然后再把 .def导成 .lib 最后生成 *.lib文件后加进工程中,在补一个头文件。这样哪一个Form中用只要加载一下头文件,使用也方便就象使用函数一样使用。不行请与QQ:115980702
 
多人接受答案了。
 
后退
顶部