VC调用DELPHI DLL
2009-05-16 10:43
549 查看
DELPHI代码
VC调用
转至:http://www.99inf.net/SoftwareDev/Delphi/54788.htm
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
相关文章推荐
- VC调用Delphi写的dll的一个问题的处理
- delphi调用vc编写的DLL应注意的问题
- 请问Delphi调用VC写的dll,有传入和传出参数都是unsigned char*运行中有有关问题
- [笔记]Delphi 2007写DLL供VC调用实例
- VC6动态调用DELPHI DLL
- Delphi 调用VC生成的DLL
- delphi调用vc编写的DLL应注意的问题
- sqlserver 2000 触发器 存储过程调用外部dll,可以使vb,vc,delphi生成
- Delphi 调用VC的DLL
- VC调用Delphi的DLL时遇到的问题及解决
- DELPHI调用VC编写的DLL 函数参数为LPTSTR
- sqlserver 2000 触发器 存储过程调用外部dll,可以使vb,vc,delphi生成
- 发现个delphi调用vc写的Dll中包含pchar参数报错奇怪现象
- Delphi中调用VC编写的DLL内对象
- Delphi 调用VC生成的DLL
- Delphi 调用VC的DLL
- Delphi 调用VC生成的DLL
- delphi调用vc写的dll的方法
- DELPHI调用VC写的DLL经验
- VC调用Delphi的DLL时遇到的问题及解决