我写了一个DLL文件,里面调用了一个用C写的DLL
function CreateCard(cardNo,CustomNo,AppVer,startdate,enddate:pchar):integer;stdcall;
var
ret : integer;
srCardMK:string;
begin
srCardMK:=‘000’;
ret:=HDAPP_CreateCard_USER(CardNo,CustomNo,AppVer,StartDate,EndDate,srCardMK);//这个就是用VC写的
srCardMK:=inttostr(ret);
showmessage(srCardMK);
result:=38684;
end;exports
CreateCard;调用CreateCard.dll的时候执行到end;的时候,就报错了,
function CreateCard(cardNo,CustomNo,AppVer,startdate,enddate:pchar):integer;stdcall;
var
ret : integer;
srCardMK:string;
begin
srCardMK:=‘000’;
ret:=HDAPP_CreateCard_USER(CardNo,CustomNo,AppVer,StartDate,EndDate,srCardMK);//这个就是用VC写的
srCardMK:=inttostr(ret);
showmessage(srCardMK);
result:=38684;
end;exports
CreateCard;调用CreateCard.dll的时候执行到end;的时候,就报错了,
ret:=HDAPP_CreateCard_USER(CardNo,CustomNo,AppVer,StartDate,EndDate,pchar(srCardMK));//这个就是用VC写的
这个调用的时候都对的
返回也对,一直执行到end;的时候,才报错
你可以试试看
我已经改成这样了,这个调用没有问题,因为已经有返回值了,我单步执行,一直到end;结束的时候,才报错。爱若琴弦说的方法我也试了,还不是行,晕啊。。
很久之前写一个网络方面的DLL,这个DLL动态库的作用也只是去把ws2_32.dll,Iphlpapi.dll
等动态库中的一些好用的API提出来。那时候也有遇见这样的问题,到最后退出时才报错。最后解决的方法就是变量不要定义在函数的VAR下,而是定义成全局的,就解决了楼主不防把
var
srCardMK:string;
这个变量不要定义在函数中,而是定到到全局中。
Syant J. Wang
我也放在全局了,还是不行是不是需要释放一下?对DLL不是太明白。
感觉应该还是在string上面,应该使用PChar,还有你主程序是怎么调用的?是不是调用的时候出现问题了,你把调用的代码也贴出来看看
var
cardNo,CustomNo,AppVer,startdate,enddate:string;
ret:integer;
begin
CardNo := '01234567890123456789' ;
CustomNo :='123456';
AppVer :='01';
startdate := '20091010' ;
enddate := '20091010' ;
ret:=CreateCard(pchar(CardNo),pchar(CustomNo),pchar(AppVer),pchar(StartDate),pchar(EndDate));
showmessage(inttostr(ret));
end;主调用程序
var
ret : integer;
LibHandle:thandle; //句柄
DelPath : TDllProc; //定义过程入口指针
begin
LibHandle:=LoadLibrary('D:\test\WangCardApp.dll'); //装载WangCardApp.DLL文件
if LibHandle> 0 then
begin
try
DelPath := GetProcAddress(LibHandle,PChar('HDAPP_CreateCard_USER'));
srCardMK:='11330770015069761900291808985888';
ret:=HDAPP_CreateCard_USER(CardNo,CustomNo,AppVer,StartDate,EndDate,srCardMK);
finally
FreeLibrary(LibHandle); //释放WangCardApp.DLL文件
end;
end;
result:=234;end;//输出函数card
exports
CreateCard;
DelPath ,指针在这个程序里有什么用?
怎么执行到最后还是报错?