本帖最后由 Iamclq 于 2009-12-20 12:17:49 编辑

解决方案 »

  1.   

    下午又试了一下,如果把方法中的语句全部注释掉,系统仍然会注册成功,不知是从何处注册的?procedure TMyFactory.UpdateRegistry(Register: Boolean);
    var
      dllpath: array[0..1023] of char;
    begin
    //  inherited UpdateRegistry(Register);//    GetModuleFileName(HInstance, dllpath, SizeOf(dllpath));
    //    ShowMessage(dllpath); // 这里显示的是实际运行的dll路径
    //    CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID), '', 'My');
    //    CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID) + '\InProcServer32', '', dllpath);
        // 注册表里显示的却是dll的编译路径,上面传进去的参数也是实际运行的路径,真的是太奇怪了?
    //    CreateRegKey('CLSID\' + GUIDTOSTRING(CLASSID) + '\InProcServer32', 'ThreadingModel', 'Apartment');end;全部注释后仍然也会自动注册
      

  2.   

    自动注册,是用Regsvr32.Exe吧?
      

  3.   

    对,是用 regsvr32 注册的
      

  4.   

    难道是 regsvr32 在自动注册?
      

  5.   

    regsvr32除非调用它,否则不会自动注册的
      

  6.   

    我是指运行 regsvr32注册dll时,如果把更新注册表的语句删除后,注册表里仍然会注册进一些信息,不知是哪里自动注册的?
      

  7.   

    regsvr32调用了DllRegisterServer方法注册的,DllRegisterServer最终还是调了UpdateRegistry方法的,你可以看看ComServ单元DllRegisterServer的实现。
    从你描述的情况确实很难断定问题出在哪里,我也不能妄加猜测,你可以写一些日志来跟踪这个流程。