解决方案 »

  1.   

    REGEDIT4[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
    @="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
      

  2.   

    可是我试过,把这条记录删除,然后在注册mscomm32.ocx,但这条记录还是不存在
      

  3.   

    如果不是安装版的mscomm,只有mscomm32.ocx,注册表要手工注入或者写个批处理
      

  4.   

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
    @="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
    这个是固定的,笨办法就是程序写代码查注册表有没这一项
      

  5.   

    建议你用SPCOMM,OCX比较讨厌要客户的电脑注册,不然报错的,移植性不好
      

  6.   

    可是SPCOMM没那么实用,也可能是我不会用。
      

  7.   

    这是我从代码里摘出来的, 你自己删除用不到的单元引用uses StrUtils, ComObj, ActiveX, SysUtils, Variants, Windows, Registry;//检查dll, ocx是否注册
    function TJRCheck.CheckReg(const AFileName: string): boolean;
    var
      clsID: TGUID;
      obj: IUnknown;
    begin
      try
        CLSIDFromProgID(PCHAR(AFileName), clsID);//根据提供的文件路径获得guidID
        obj := CreateCOMObject(clsID);//如果创建成功说明已经注册
        result := obj <> nil;
      except
        on E: Exception do
          result := FALSE;
      end;
    end;//注册/卸载dll, ocx
    function TJRCheck.RegisterOleFile(strOleFileName: STRING;
      OleAction: Byte): boolean;
    const
      RegisterOle = 1; // 注册
      UnRegisterOle = 0; // 卸载
    type
      TOleRegisterFunction = function: HResult; // 注册或卸载函数的原型
    var
      hLibraryHandle: THandle; // 由LoadLibrary返回的DLL或OCX句柄
      hFunctionAddress: TFarProc; // DLL或OCX中的函数句柄,由GetProcAddress返回
      RegFunction: TOleRegisterFunction; // 注册或卸载函数指针
    begin
      result := FALSE;
      // 打开OLE/DCOM文件,返回的DLL或OCX句柄
      hLibraryHandle := LoadLibrary(PCHAR(strOleFileName));
      if (hLibraryHandle > 0) then // DLL或OCX句柄正确
        try
          // 返回注册或卸载函数的指针
          if (OleAction = RegisterOle) then // 返回注册函数的指针
            hFunctionAddress := GetProcAddress(hLibraryHandle,
              PCHAR('DllRegisterServer'))
          else // 返回卸载函数的指针
            hFunctionAddress := GetProcAddress(hLibraryHandle,
              PCHAR('DllUnregisterServer'));
          if (hFunctionAddress <> NIL) then // 注册或卸载函数存在
          begin
            RegFunction := TOleRegisterFunction(hFunctionAddress); // 获取操作函数的指针
            if RegFunction >= 0 then // 执行注册或卸载操作,返回值>=0表示执行成功
              result := true;
          end;
        finally
          FreeLibrary(hLibraryHandle); // 关闭已打开的OLE/DCOM文件
        end;
    end;
    //注册dll, ocx
    function TJRCheck.RegFile(const AFileName: string): boolean;
    begin
      result := RegisterOleFile(AFileName, 1);
    end;