高分阿~~~~~我来回答吧(下面的没有测试,随手写的,自己修改吧): 首先定义如下: type TProc=function(dwProcessID:Dword;dwType:dword):dword;stdcall;然后在需要调用的地方: var p:proc; h:hwnd; .... begin h:=LoadLibrary('KERNEL32.DLL'); if h>0 then begin proc:=GetProcAddress(h,'RegisterServiceProcess'); if @Proc<>nil then Proc(GetCurrentProcessID,1); FreeLibrary(h); end; end;
同意Kingron(戒网中……),呵呵可惜我来晚了,不过还可以说一些,就是,函数的声明与函数的实现是分开的,比如: function SetClassWord; external user32 name 'SetClassWord'; 这样的就是函数的实现,与 function xxxxx begin . . . end; 是等同的 可是并不能只有函数的声明而没有实现,那怎么办呢?就是不声明具体的函数而是声明这样函数的类型,然后定义这样类型的指针,然后再到具体的Dll中寻找具体的函数的地址,当然前提是这个Dll已经装载了,然后将这个函数的地址赋给前面那个指针,这样就可以用那个指针来访问函数了。
程序连IF语句都没执行就报错了
首先定义如下:
type
TProc=function(dwProcessID:Dword;dwType:dword):dword;stdcall;然后在需要调用的地方:
var
p:proc;
h:hwnd;
....
begin
h:=LoadLibrary('KERNEL32.DLL');
if h>0 then
begin
proc:=GetProcAddress(h,'RegisterServiceProcess');
if @Proc<>nil then
Proc(GetCurrentProcessID,1);
FreeLibrary(h);
end;
end;
function SetClassWord; external user32 name 'SetClassWord';
这样的就是函数的实现,与
function xxxxx
begin
.
.
.
end;
是等同的
可是并不能只有函数的声明而没有实现,那怎么办呢?就是不声明具体的函数而是声明这样函数的类型,然后定义这样类型的指针,然后再到具体的Dll中寻找具体的函数的地址,当然前提是这个Dll已经装载了,然后将这个函数的地址赋给前面那个指针,这样就可以用那个指针来访问函数了。