当有程序Load我这个DLL的时候,dll内部经过识别后,不允许主程序Load,然后自行freeload.
比如要实现:A调用test.dll,test.dll判断A不符合某个规则,就退出A的调用,这样即使A运行了,但是在A的加载DLL列表列不会显示test.dll.

解决方案 »

  1.   

    我想到的是在加载建立一个导出函数或是dll公共变量,如果使用dll里面的导出函数之前不先调用这个函数就自己freeload
      

  2.   

    在DLL的
    begin
      //这里判一下,
    end.
    给你个例子:
    library testdll1;uses
      SysUtils,
      Classes,
      Dialogs,
      windows;{$R *.res}
    var
      canuse:boolean;
    procedure test;
    begin
      if  canuse then
        messagebox(0,'test','mess',0);end;
    exports   test;begin
       canuse:=false;  //这里是true,就可以调用上面的test,否则不调用
    end.
      

  3.   

    还有一种最简单的办法
    原来的fun f(x,y)
    改为:fun(password,x,y)
    在fun里先判断password是不是'abc'的,不是就直接返回
    而只有你的主程序才知道需要传入'abc'
      

  4.   

    大家都在想怎么不让主程序使用,我仅是想实现不让主程序loadlibrary上
      

  5.   

    delphi6的DLL有关DllEntryPoint部分不支持(其它版本没测试,这个几年前我们就在csdn上讨论过),如果是bcb或vc,这个问题简单,只要在DllEntryPoint中判断就可以了(返回true,可加载dll,返回false不可加载)
    而D6,虽然有DLLProc,但经我测试,它只在DLL_PROCESS_DETACH时起作用(也就是释放DLL时)且它是个过程,不是函数,也就是说,无法控制DLL的载入
    所以,我只能在DLL中,用全程变量的方法,控制函数的执行,如果一定要控制DLL的载入,要么在主程序中控制,要么将DLL改成BCB的