我修改了DELPHI目录下的一个\Source\Vcl\OleCtrls.pas 文件,然后我需要重新编译这个OleCtrls.pas 文件,但不懂得如何编译,我试采用了install component的导入新控件方式来编译,但有如下提示:
[Error] dclusr.dpk(36): Package 'vcl' already contains unit 'OleCtrls'请问,我如何才能成功编译这个文件?急急急,在线等!!!!

解决方案 »

  1.   

    也许是大家用得少, 在几年之间每当提起这个问题一直有人认为是程序的其它方面有缺陷, 就如同大富翁论坛上的这个帖子一样: http://www.Delphibbs.com/Delphibbs/dispq.asp?lid=347350而且还有一个专家星人信誓旦旦地给出好几个所谓的解决办法和英文资料, 但是完全无用! 这个人是谁我就不说了. 但是事实证明并非如此, 而是VCL中对于TOleControl的实现有问题, 也就是说上面那个帖子中最后zhongs的解答才是正确的. zhongs建议在TWebBrowser和TOleControl的继承关系中间加入一个修正此问题的中间类...但是经我观察, 我认为TOleControl存在的缺陷会广泛波及其它既有的和将来可能有的自动化控件, 所以我的建议是对OleCtrls.pas进行如下修改: function TOleControl.GetIDispatchProp(Index: Integer): IDispatch;
    var
      Temp: TVarData;
    begin
      GetProperty(Index, Temp);
      //Result := IDispatch(Temp.VDispatch);
      Pointer(Result) := Temp.VDispatch;
    end;function TOleControl.GetIUnknownProp(Index: Integer): IUnknown;
    var
      Temp: TVarData;
    begin
      GetProperty(Index, Temp);
      //Result := IUnknown(Temp.VUnknown);
      Pointer(Result) := Temp.VUnknown;
    end;并且要记住重新编译OleCtrls.pas最后感谢zhongs为我解答这个疑惑
      

  2.   

    删除这个单元的.dcu文件,然后在一个项目里应用这个单元,编译该项目,应该没有问题了。
    没有修改其属性等公共方法吧?!
      

  3.   

    把它放到其它项目里编译就会提示找不到那个DCU文件,无法编译啊
      

  4.   

    把它放到其它项目里编译就会提示找不到那个DCU文件,无法编译啊
      

  5.   

    lib目录下的dcu文件不建议删除.另外,楼主所说的问题,个人还是不建议用如此方法修改.原方法会对引用计数进行管理,而修改后的方法,看似把当前出现的问题解决了,但是其它问题可能就会伴随而来.正确的方法是把该释放的接口释放掉.
      

  6.   

    我只是这样子建议,因为没有实际的测试过.所以并不清楚问题可能出在哪里.
    但是,如果把TOleControl的代码改掉,那么结果就难以想象了.所有继承于TOleControl或者使用TOleControl相关的东西都会受到影响.