关于调用dll中的函数(50分)

  • 主题发起人 主题发起人 rookie_ron
  • 开始时间 开始时间
R

rookie_ron

Unregistered / Unconfirmed
GUEST, unregistred user!
dll中的一个函数,只有函数名和pb中的调用范例,我在delphi中用跟pb中一样的格式调用
始终无法成功,请高手指点一二。
 
动态调用:
YouFunction = Function;stdcall;
var
Form1: TForm1;
implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
ResultInt:integer;
MyFunc: YouFunction;
Moudle: THandle;
begin
Moudle := Loadlibrary('Demo.dll');
try
if moudle>0 then begin
@MyFunc := GetProcAddress(Moudle,'Dll Function'); //Dll Function 指你的DLL中的函数名
if not(@MyFunc = nil) then
MyFunc //执行函数操作
else
showmessage('function error');
end
else
showmessage('dll not found');
finally
FreeLibrary(Moudle);
end;
end;

静态调用:
function Youfunction:Boolean;far external 'xxx.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
Youfunction;
end;

 
楼上的,来混分吗?
调用函数我也会。
PB中是这样调用的:
function int GETFONTHEX(string outstr, string fontname,
int orient, int height,
int width, int bold, int italic,
ref string hexbuf) library "fnthex32.dll"
我在delphi中是这样调用的
function GETFONTHEX(StrOut, FontName: string;
Orient, Height, Width, Bold, Italic: WORD;
var HexBuf: string): integer; cdecl; external 'fnthex32.dll';
为什么总是不行?函数的返回值已经有了,跟踪断点时发现形参StrOut和FontName都成了
InaccessValue,形参Orient、Height、Width、Bold、Italic的值居然也发生了变化,
而值参HexBuf也成了InaccessValue,为什么会这样?是不是参数的顺序有问题?
 
那当然啦,函数的顺序是不能变动的。
 
没用的废话不要说。
 
靠,自己玩不转还在这装B,用你的PB去吧,傻B
 
楼上的,我玩不玩的转关你他妈的P事!你倒不用装,你就是一他妈的B!
 
把 cdecl 改成 stdcall 试试!!!!!!!!!!1
 
都是同道中人,不要吵了
 
调用方式改成STDCALL试试,
 
将String改成ShortString就Ok了。
 
后退
顶部