delphi 的dll里边调用另外一个dll方法,新手
delphi 的dll里面调用另外一个dll方法,新手
大家好,我是这两天刚开始接触的delphi,前几天我们公司有个接口要做,要调用别人公司已经封装好的DLL文件,之前我是用PB做开发的,但别人提供的DLL传值跟反值都是对象、类,PB支持不好,后来别人说可以用delphi再封装一个DLL,于是就有了我现在遇到的问题,我用的是delphi7.0,下面是我创建的DLL Wizard,代码如下:
library tkrsdll;
uses
SysUtils,
InvokeRegistry,
Types,
XSBuiltIns,
Classes;
type
MedCardCheckInfo = class
private
FmedCardNo: WideString;
published
property medCardNo: WideString read FmedCardNo write FmedCardNo;
end;
CardCheckReplyInfo = class
private
FTKFlag: WideString;
published
property TKFlag: WideString read FTKFlag write FTKFlag;
end;
{$R *.res}
//接口函数声明
function CheckMedCard(const mMedCardCheckInfo: MedCardCheckInfo): CardCheckReplyInfo; stdcall;external 'TKShell.dll';
//自己重写的函数方法
function CheckMedCardA(code:WideString):WideString;stdcall;
var
mUserInfo:MedCardCheckInfo;
mCheckReply:CardCheckReplyInfo;
begin
mUserInfo:=MedCardCheckInfo.Create();
mUserInfo.medCardNo:= code;
mCheckReply:= CheckMedCard(mUserInfo);
CheckMedCardA:= mCheckReply.TKFlag;
end;
exports CheckMedCardA;
begin
end.
然后建立了一个application,代码如下:
unit tksrdllcs;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function CheckMedCardA(code:String):String;stdcall; external 'tkrsdll.dll';
procedure TForm1.Button2Click(Sender: TObject);
begin
label1.Caption := CheckMedCardA('101463000018')
end;
end.
运行单击按钮的时候就报错了:Project tkrsdllcs.exe raised exception class E01eSysError with message '尚未调用CoInitialize‘ ,process stopped use Step or Rrun to continue
大伙帮看看,是不是我哪里写错了,或者哪里不对,指点一下,老板真心催的紧
------解决方案--------------------
try
CoInitialize(nil);//开头调用初始化
//
finally
CoUninitialize;//结尾释放
end;
大家好,我是这两天刚开始接触的delphi,前几天我们公司有个接口要做,要调用别人公司已经封装好的DLL文件,之前我是用PB做开发的,但别人提供的DLL传值跟反值都是对象、类,PB支持不好,后来别人说可以用delphi再封装一个DLL,于是就有了我现在遇到的问题,我用的是delphi7.0,下面是我创建的DLL Wizard,代码如下:
library tkrsdll;
uses
SysUtils,
InvokeRegistry,
Types,
XSBuiltIns,
Classes;
type
MedCardCheckInfo = class
private
FmedCardNo: WideString;
published
property medCardNo: WideString read FmedCardNo write FmedCardNo;
end;
CardCheckReplyInfo = class
private
FTKFlag: WideString;
published
property TKFlag: WideString read FTKFlag write FTKFlag;
end;
{$R *.res}
//接口函数声明
function CheckMedCard(const mMedCardCheckInfo: MedCardCheckInfo): CardCheckReplyInfo; stdcall;external 'TKShell.dll';
//自己重写的函数方法
function CheckMedCardA(code:WideString):WideString;stdcall;
var
mUserInfo:MedCardCheckInfo;
mCheckReply:CardCheckReplyInfo;
begin
mUserInfo:=MedCardCheckInfo.Create();
mUserInfo.medCardNo:= code;
mCheckReply:= CheckMedCard(mUserInfo);
CheckMedCardA:= mCheckReply.TKFlag;
end;
exports CheckMedCardA;
begin
end.
然后建立了一个application,代码如下:
unit tksrdllcs;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function CheckMedCardA(code:String):String;stdcall; external 'tkrsdll.dll';
procedure TForm1.Button2Click(Sender: TObject);
begin
label1.Caption := CheckMedCardA('101463000018')
end;
end.
运行单击按钮的时候就报错了:Project tkrsdllcs.exe raised exception class E01eSysError with message '尚未调用CoInitialize‘ ,process stopped use Step or Rrun to continue
大伙帮看看,是不是我哪里写错了,或者哪里不对,指点一下,老板真心催的紧
------解决方案--------------------
try
CoInitialize(nil);//开头调用初始化
//
finally
CoUninitialize;//结尾释放
end;