delphi7调用webservice(VS.net)在自定义dll文件中声明以下函数(delphi编写) //////////////////////////////////////////////////////////////////////////////////// function Getdefurl(user_id:WideString;password:WideString; var userdata:WideString;var errmsg:WideString):integer;stdcall;////////////////////////////////////////////////////////////////////////////////////在delphi下,编写应用程序,调用自定义dll代码如下: procedure TForm1.webserviceClick(Sender: TObject); type TIntFunc = function (user_id:wideString;password:wideString; userdata:wideString; errmsg:wideString):integer; stdcall; var Th:Thandle; Tf:TIntFunc; Tp:TFarProc; str1,str2:string ; s1,s2,s3,s4,s5,s6:string;begin s1:=edit1.text; s2:=edit2.text; s3:=edit3.text; s4:=edit4.text; s5:=edit5.text; s6:=edit6.text; Th:=LoadLibrary('C:\WINDOWS\system32\uskydll.dll'); if Th>0 then try Tp:=GetProcAddress(Th,PChar('Getdefurl')); if Tp<>nil then begin try Tf:=TIntFunc(Tp); Tf(s1,s2,s3,s4,s5,s6,str1,str2 ); finally showmessage('Error'); end;
userdatat.caption :=str1; errmsgt.caption :=str2; end else ShowMessage('Getdefurlº¯ÊýûÓÐÕÒµ½'); finally FreeLibrary(Th); end else ShowMessage('uskydll.dllûÓÐÕÒµ½'); end;错误描述: title:Debugger Exception Notification message:Project apptest.exe raised exception class EAccessViolation with message 'Access violation at address 770ECA05 in module 'oleaut32.dll'. Read of address 0000000'. Process stopped. Use step or run to continue.
出错语句: Tf(s1,s2,s3,s4,s5,s6,str1,str2 );可怎么trace into dll文件中的tf函数呢?
刚才试了,执行到这句就出错 Tf(s1,s2,s3,s4,s5,s6,str1,str2 );错误信息: title:apptest message:Access violation at address 770ECA05 in moudle 'oleaut32.dll'.Read of address 0000000.跟踪程序没有进入dll里面,请帮忙看看
function Getdefurl(user_id:WideString;password:WideString; var userdata:WideString;var errmsg:WideString):integer;stdcall; TIntFunc = function (user_id:wideString;password:wideString; userdata:wideString; errmsg:wideString):integer; stdcall;这两个里面参数定义不一样,,,把TIntFunc = function (user_id:wideString;password:wideString; userdata:wideString; errmsg:wideString):integer; stdcall;改成和声明一样
procedure TForm1.webserviceClick(Sender: TObject); type TIntFunc = function(user_id:WideString;password:WideString; software:WideString; ver:WideString;group_id:WideString;creditkey:WideString;var userdata:WideString;var errmsg:WideString):integer;stdcall; var Th:Thandle; Tf:TIntFunc; Tp:TFarProc; str1,str2:String ; s1,s2,s3,s4,s5,s6:String;begin s1:=edit1.text; s2:=edit2.text; s3:=edit3.text; s4:=edit4.text; s5:=edit5.text; s6:=edit6.text; Th:=LoadLibrary('C:\WINDOWS\system32\uskydll.dll'); if Th>0 then try Tp:=GetProcAddress(Th,PChar('Getdefurl')); if Tp<>nil then begin try Tf:=TIntFunc(Tp); Tf(s1,s2,s3,s4,s5,s6,@str1,@str2 ); finally
end; userdatat.caption :=str1; errmsgt.caption :=str2; end else ShowMessage('Getdefurlº¯ÊýûÓÐÕÒµ½'); finally FreeLibrary(Th); end else ShowMessage('uskydll.dllûÓÐÕÒµ½'); end; TIntFunc = function(user_id:WideString;password:WideString; software:WideString; ver:WideString;group_id:WideString;creditkey:WideString;var userdata:WideString;var errmsg:WideString):integer;stdcall;以上函数调用已和Dll文件中声明的格式一样,可还是有错误信息,请帮忙看看。 错误信息如下: [Error] test.pas(116): Types of actual and formal var parameters must be identical [Fatal Error] apptest.dpr(6): Could not compile used unit 'test.pas'
////////////////////////////////////////////////////////////////////////////////////
function Getdefurl(user_id:WideString;password:WideString; var userdata:WideString;var errmsg:WideString):integer;stdcall;////////////////////////////////////////////////////////////////////////////////////在delphi下,编写应用程序,调用自定义dll代码如下:
procedure TForm1.webserviceClick(Sender: TObject);
type
TIntFunc = function (user_id:wideString;password:wideString; userdata:wideString; errmsg:wideString):integer; stdcall;
var
Th:Thandle;
Tf:TIntFunc;
Tp:TFarProc;
str1,str2:string ;
s1,s2,s3,s4,s5,s6:string;begin
s1:=edit1.text;
s2:=edit2.text;
s3:=edit3.text;
s4:=edit4.text;
s5:=edit5.text;
s6:=edit6.text; Th:=LoadLibrary('C:\WINDOWS\system32\uskydll.dll');
if Th>0 then
try
Tp:=GetProcAddress(Th,PChar('Getdefurl'));
if Tp<>nil then
begin
try
Tf:=TIntFunc(Tp); Tf(s1,s2,s3,s4,s5,s6,str1,str2 );
finally
showmessage('Error');
end;
userdatat.caption :=str1;
errmsgt.caption :=str2; end
else
ShowMessage('Getdefurlº¯ÊýûÓÐÕÒµ½');
finally
FreeLibrary(Th);
end
else
ShowMessage('uskydll.dllûÓÐÕÒµ½');
end;错误描述:
title:Debugger Exception Notification
message:Project apptest.exe raised exception class EAccessViolation with message 'Access violation at address 770ECA05 in module 'oleaut32.dll'. Read of address 0000000'.
Process stopped. Use step or run to continue.
title:apptest
message:Access violation at address 770ECA05 in moudle 'oleaut32.dll'.Read of address 0000000.跟踪程序没有进入dll里面,请帮忙看看
TIntFunc = function (user_id:wideString;password:wideString; userdata:wideString; errmsg:wideString):integer; stdcall;这两个里面参数定义不一样,,,把TIntFunc = function (user_id:wideString;password:wideString; userdata:wideString; errmsg:wideString):integer; stdcall;改成和声明一样
type
TIntFunc = function(user_id:WideString;password:WideString; software:WideString; ver:WideString;group_id:WideString;creditkey:WideString;var userdata:WideString;var errmsg:WideString):integer;stdcall;
var
Th:Thandle;
Tf:TIntFunc;
Tp:TFarProc;
str1,str2:String ;
s1,s2,s3,s4,s5,s6:String;begin
s1:=edit1.text;
s2:=edit2.text;
s3:=edit3.text;
s4:=edit4.text;
s5:=edit5.text;
s6:=edit6.text; Th:=LoadLibrary('C:\WINDOWS\system32\uskydll.dll');
if Th>0 then
try
Tp:=GetProcAddress(Th,PChar('Getdefurl'));
if Tp<>nil then
begin
try
Tf:=TIntFunc(Tp); Tf(s1,s2,s3,s4,s5,s6,@str1,@str2 );
finally
end; userdatat.caption :=str1;
errmsgt.caption :=str2; end
else
ShowMessage('Getdefurlº¯ÊýûÓÐÕÒµ½');
finally
FreeLibrary(Th);
end
else
ShowMessage('uskydll.dllûÓÐÕÒµ½');
end; TIntFunc = function(user_id:WideString;password:WideString; software:WideString; ver:WideString;group_id:WideString;creditkey:WideString;var userdata:WideString;var errmsg:WideString):integer;stdcall;以上函数调用已和Dll文件中声明的格式一样,可还是有错误信息,请帮忙看看。
错误信息如下:
[Error] test.pas(116): Types of actual and formal var parameters must be identical
[Fatal Error] apptest.dpr(6): Could not compile used unit 'test.pas'