我在可执行文件同目录下复制有四个文件:msvcrt20.dll,MFCANS32.DLL,OC30.DLL和VCF132.OCX,
下面代码在本机正确执行,为什么在别的机子还是有问题?procedure TForm1.FormCreate(Sender: TObject);
var
    RegisterFileName:PChar;
begin
    RegisterFileName := PChar(ExtractFileDir(Application.ExeName)
                        +  '\VCF132.OCX');
    if FileExists(RegisterFileName) = true then
    begin
        CopyFile(RegisterFileName,'C:\VCF132.OCX',true);
        winexec(pchar('regsvr32.exe /s ' + 'C:\VCF132.OCX'), sw_show);  
    end;
end;
//
由于winexec的参数以空格作为识别的手段,为了避免在C:\Documents and Settings\Administrator\桌面\VCF132.OCX 这样的文件路径有空格出错,采用先复制到c:\VCF132.OCX',然后注册c:\VCF132.OCX,不知道有什么别的好办法?谢谢大家帮忙!

解决方案 »

  1.   

    你可以用安装程序来完成ocx的注册过程。如果你一定要在自己的程序中完成的话,我建议你在执行程序时生成一个bat文件,bat的文件内容我想你应该知道怎么写吧,然后winexec这个bat文件不就行了?
      

  2.   

    那4个文件,我是跟应用程序放在一起啊,只不过又把VCF132.OCX复制到了c:\VCF132.OCX
    为了避免类似:winexec(pchar('regsvr32.exe /s ' + 'C:\Documents and Settings\Administrator\桌面\VCF132.OCX'), sw_show); 出错 ,看我最后的说明。
      

  3.   

    menliwxj(有缘):
    sorry,能否把bat的内容写一下?另如何在安装过程中注册ocx,以Delphi 5.0 Shell为例,方便讲解的话。
    上面的问题,我会另外单独给你分的。-----
    对于我我上述代码在其他机子上运行出现了问题,能否解释一下?谢谢。
      

  4.   

    例:bat文件的名字为a.bat,(要保证你的目录下没有同名文件即可):
    内容:
      regsvr32 盘符:\文件目录\VCF132.ocx
    顺便告诉你取可执行文件所在目录的方法:extractfilepath(application.exename).
    如果你的ocx是与你的可执行文件同在一个目录,上面一行代码即为:
      'regsvr32(后面带一个空格) '+extractfilepath(application.exename)+'VCF132.ocx';
    将上面一行内容写入bat文件中即可。
    代码详如下:
    var
      f: textfile;
      filename: string;
    begin
      filename := extractfilepath(application.exename)+'a.bat';
      assignfile(f,filename);
      try
        if not fileexists(filename) then
           rewrite(f)
        else
           reset(f);
        writeln(f,'regsvr32 '+extractfilepath(application.exename)+'VCF132.ocx');
      finally
        closefile(f);
      end;
      winexec(filename,sw_shownormal);
    end;
      

  5.   

    ocx是微软公司开发的一种可视控件,可以跨语言调用。调用这个ocx的前提是它必须是在本地机器上存在并是经过注册的,“注册”就是说必须将它的一些信息写入注册表中,至于具体是什么信息,你在执行了以上操作之后,然后到注册表中去找该ocx相关的条目就知道了。
      

  6.   

    对啊,别人也告诉我只需要把msvcrt20.dll,MFCANS32.DLL,OC30.DLL和VCF132.OCX这四个文件复制到跟应用程序同目录下,然后注册就可以了,但是我这么做了为什么不行呢?
    另:C:\Program Files\Borland\Delphi7\Ocx\Vci\Form1\VCF1.HLP也是这么说明的,能帮我解决这个问题吗?谢谢。
      

  7.   

    看来你的问题还不仅在于ocx了,你的dll可能也要注册,我没有用过F1BOOK,所以也不太清楚那三个DLL的作用,我想你可以试试注册它们吧,方法与注册ocx一样。
      

  8.   

    先感谢 menliwxj(有缘) 的解答,请先取分100http://expert.csdn.net/Expert/topic/1690/1690701.xml?temp=.240307
      

  9.   

    另问一下:1.由于win98不认识在其他路径在的regsvr32.exe命令,如何取得当前操作系统的regsvr32.exe的全路径?2.对于已经注册上的控件,比如winexec(pchar('regsvr32.exe /s ' + 'C:\VCF132.OCX'), sw_show);  用regedit进入注册表后,如何在找到其在注册表上的位置?
      

  10.   

    在Delphi的安装路径下面有一个Demo目录,里面有一个演示怎么使用Delphi来注册COM库的例程
      

  11.   

    SysDirPath:String;GetSystemDirectory(PAnsiChar(SysDirPath),100);//我用上述代码来获取当前的系统System路径,为什么编译通过,执行有错呢?