ocx控件中有几个com类,注册ocx后,用CoXXX.Create创建一个对象时提示没有注册类型,但其他几个com类没有问题,请问有可能是什么原因?

解决方案 »

  1.   

    可能还需要在注册表中注册?
    如果COM对象没有在注册表中注册,那么按照下面的方法创建它function CreateComObjectFromDll(CLSID: TGUID; DllHandle: THandle): IUnknown;
    var
      Factory: IClassFactory;
      DllGetClassObject: function(const CLSID, IID: TGUID; var Obj): HResult;
      stdcall;
    begin
      DllGetClassObject := GetProcAddress(DllHandle, 'DllGetClassObject');
      if Assigned(DllGetClassObject) then
      begin
        DllGetClassObject(CLSID, IClassFactory, Factory);
        Factory.CreateInstance(nil, IUnknown, Result);
      end;
    end;
      

  2.   

    怎么使用?在调用ocx组件的程序中使用吗?IClassFactory在哪个单元里的?
      

  3.   

     program   RegisterMyOCX;   
      uses   
          OLECtl,   Windows,   Dialogs;   
      var   
          OCXHand:   THandle;   
          RegFunc:   TDllRegisterServer;       //add     to   the   uses   clause   
      begin   
          OCXHand:=   LoadLibrary('c:\windows\system\test.ocx');   
          RegFunc:=   GetProcAddress(OCXHand,   'DllRegisterServer');     //case   sensitive   
          if   RegFunc   <>   0   then     
              RegFunc   
          else   
              ShowMessage('Error!')   
          FreeLibrary(OCXHand);   
        
          //   You   can   the   same   way   unregister   the   OCX:     
          //   replace   'DllRegisterServer'   by   'DllUnregisterServer'   
      end.   
      

  4.   

    在程序的未尾加上initialization
      OleInitialize(nil);finalization
      try
        OleUninitialize;
      except
      end;