您的位置:首页 > 编程语言 > Delphi

VC调用DELPHI DLL

2009-05-16 10:43 549 查看
DELPHI代码

delphi DLL 代码:
library InspectWSDll;
uses
SysUtils;
{$R *.res}
exports
Validate,
retrieveDevicePage,
retrieveDevicePage1,
retrieveInspectionPersonPage,
retrieveInspectionPersonPage1;

以下为实现文件:
unit Unt_UserLogin;
interface
uses DBAccessService,GlobeUtils,Dialogs,SysUtils,CnDebug;
type
PTUser = ^TUser_;
TUser_ = record
id: Int64;
name: WideString;
pass: WideString;
region: WideString;
username: WideString;
usertype: Int64;
end;
function Validate(UserName,Password:PChar;P:PTUser):Integer;stdcall;
function TUser_ToTUser(obj:TUser_):TUser;
function TUserToTUser_(Tobj:TUser):TUser_;
implementation
function Validate(UserName,Password:PChar;P:PTUser):Integer;
var
A:PTUser;
fUser:TUser;
begin
Validate := -1;
fUser := TUser.Create;
try
fUser := FService.validate(UserName,Password);
A:=PTUser(P);
with A^ do
begin
id       :=fUser.id;
name     :=fUser.name;
pass     :=fUser.pass;
region   :=fUser.region;
username :=fUser.username;
usertype :=fUser.usertype;
end;
Validate:=0;
except
Validate := ExceptionCode;
end;
end;
function TUserToTUser_(Tobj:TUser):TUser_;
var
R:TUser_;
begin
with R do
begin
id:=Tobj.id;
name:=Tobj.name;
pass:=Tobj.pass;
region:=Tobj.region;
username:=Tobj.name;
usertype:=Tobj.usertype;
end;
TUserToTUser_:=R;
end;
function TUser_ToTUser(obj:TUser_):TUser;
var
R:TUser;
begin
R:=TUser.Create;
with R do
begin
id:=obj.id;
name:=obj.name;
pass:=obj.pass;
region:=obj.region;
username:=obj.name;
usertype:=obj.usertype;
end;
TUser_ToTUser:=R;
end;
end.
=============================================================
VC调用代码:
struct TUser
{
__int64 id;
BSTR name;
BSTR pass;
BSTR region;
BSTR username;
__int64 usertype;
};
typedef int (CALLBACK* Validate)(char* Username,char* password,TUser *tu);
Validate validate;
hDLL = LoadLibrary("G://workspace//Delphi_WorkSpace//InspectWSDll//Bin//InspectWSDll.dll");

if ( hDLL!=NULL ) {
validate = (Validate)GetProcAddress(hDLL, "Validate");
struct TUser user;
ZeroMemory(&user,sizeof(TUser));
int a=validate((LPSTR)(LPCTSTR)"test",(LPSTR)(LPCTSTR)"860821",&user);
if(a!=0)
{
AfxMessageBox("Failed!");
}
else
{
AfxMessageBox("OK!");
}
}
==================================================
注意如何向DLL里传指针的话,必须要在主程序里分配内存,不能在DLL里分配。
正在装载数据……
附上Unt_TDevice的代码:
unit Unt_TDevice;
interface
uses
Dialogs,DBAccessService ,XSBuiltIns ,CnDebug ,SysUtils,Activex ,Classes,GlobeUtils;
type
PTTDevice = ^TTDevice;
TTDevice = record
company:WideString;
flag:Int64;
id:Int64;
region:WideString;
seriesnumber:WideString;
stamp:WideString;
end;
PTDevicePage = ^TDevicePage;
TDevicePage = record
Flist:Pointer;  //这是一个指向TTDevice 的指针


VC调用

VC调用代码:
struct TUser
{
__int64 id;
BSTR name;
BSTR pass;
BSTR region;
BSTR username;
__int64 usertype;
};
typedef int (CALLBACK* Validate)(char* Username,char* password,TUser *tu);
Validate validate;
hDLL = LoadLibrary("G://workspace//Delphi_WorkSpace//InspectWSDll//Bin//InspectWSDll.dll");

if ( hDLL!=NULL ) {
validate = (Validate)GetProcAddress(hDLL, "Validate");
struct TUser user;
ZeroMemory(&user,sizeof(TUser));
int a=validate((LPSTR)(LPCTSTR)"test",(LPSTR)(LPCTSTR)"860821",&user);
if(a!=0)
{
AfxMessageBox("Failed!");
}
else
{
AfxMessageBox("OK!");
}
}


转至:http://www.99inf.net/SoftwareDev/Delphi/54788.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: