Jera(我只穷得剩下分了~~~~~~~~) :
请教,
如何动态引用?

解决方案 »

  1.   

    函数如下:function RegisterServiceProcess(dwProcessID,dwType:Integer):Integer;stdcall;external'KERNEL32.DLL'怎样改成静态函数?
      

  2.   

    不,应该是2000下不调用此函数。但是好象不行啊,我只要写了一行调用语句,如RegisterServiceProcess(GetCurrentProcessID,1);
    程序连IF语句都没执行就报错了
      

  3.   

    高分阿~~~~~我来回答吧(下面的没有测试,随手写的,自己修改吧):
    首先定义如下:
    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;
      

  4.   

    同意Kingron(戒网中……),呵呵可惜我来晚了,不过还可以说一些,就是,函数的声明与函数的实现是分开的,比如:
    function SetClassWord; external user32 name 'SetClassWord';
    这样的就是函数的实现,与
    function xxxxx
    begin
    .
    .
    .
    end;
    是等同的
    可是并不能只有函数的声明而没有实现,那怎么办呢?就是不声明具体的函数而是声明这样函数的类型,然后定义这样类型的指针,然后再到具体的Dll中寻找具体的函数的地址,当然前提是这个Dll已经装载了,然后将这个函数的地址赋给前面那个指针,这样就可以用那个指针来访问函数了。