我用Delphi6做一个ActiveX控件,用向导生成,摆放了一个Mediaplayer,一个Button,一个OpenDialog,在按钮事件里填
procedure TMyTestX.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    MediaPlayer1.FileName:= OpenDialog1.FileName;
    MediaPlayer1.Open;
  end;
end;
其它全部用缺省的代码。结果生成的OCX控件在我的机器上(winXP home)在Delphi和VC6中都能正常使用,但是把这个OCX拷到其他一台未装Delphi的Win2000机器上就不能用,在我的干净的虚拟机win98中也不能使用,显示:
DAX Error:Access violation at address 00963882 in module 'MYTEST.OCX'.
Read of address FFFFFFFF.当然控件在使用前都运行过regsvr32 MYTEST.OCX。这个现象在两三年前我用Delphi4 + Powerbuilder6.5时也发生过,Delphi4写的ActiveX控件就不能正常使用,提示虽不同,但也是异常终止。给人感觉Delphi的ActiveX技术不太通用。

解决方案 »

  1.   

    编译开关不对,你的OCX组件应该还要有其它包支持,你没有链进OCX组件中或者将所需的支持包安装到欲调用此OCX组件的机器上的系统文件夹下。
      

  2.   

    我在Project options>>Packages里边不选中"Build with runtime packages",生成的目标文件有480K大小,那应该是链了运行库的,是不是还有其他编译开关?用Delphi6写的一个测试程序PROJECT1在我的干净的虚拟机win98中运行的错误:
    DAX Error:Access violation at address 01203882 in module "MYTEST.OCX'.Read of address FFFFFFFF.
    然后是非法操作的提示,然后是
    Application Error:Exception EOleSysError in module PROJECT1.EXE at 000546BD.意外错误.如果我把测试程序PROJECT1中去掉该ActiveX的调用或者用等价的VCL控件来实现就能正常运行。请各位大侠再出出招。
      

  3.   

    有没有高手给点编写ActiveForm的建议?
      

  4.   

    我也想知道这个问题,实在不行就是在机器上装dephi然后删掉(dephi没有试过,VB我都是这样做),然后就留下了哪些运行库了
    没办法的办法(要不就别删了,就装一个dephi了),还有就是打成安装包,把dephi哪些运行库都装上去了,管它呢!
      

  5.   

    我也碰到同样的问题。
    我使用delphi 5.0 给别的单位开发了一套三层的管理软件。
    在同一个网段中,OCX组件没有问题,都可以,但在不同的网段中,就出现和你一样的错误。
      

  6.   

    你碰到的问题可以这样解决。
    首先要检查客户端有没有安装Mediaplayer,没有的话,你需要在你的发布配置中,添加附加文件。
      

  7.   

    谢谢大家的建议,
    但是,我的Delphi程序中的Mediaplayer不是微软的那个,而是Delphi的VCL组件。
    其实我这里用MediaplayerVCL只是一个举例,即使我不用MediaplayerVCL也会有错误发生。
    我上文中的“用等价的VCL控件来实现”是真正的源代码级的等价,并非是功能的类同。
    所以我认为也不是缺少运行库的问题。
      

  8.   

    我也碰倒过类似的问题.
    用D6开发的ocx,在网页中调用.在win98中打开网页时开始正常,但如果多次反复点开这个有ocx的页面时,就会报DAX错,与楼主的很相似.
      

  9.   

    先用 View Dependency 看看是否差链接库,其实我也不太相信是链接库的问题。
      

  10.   

    >>>我的Delphi程序中的Mediaplayer不是微软的那个,而是Delphi的VCL组件Delphi的Mediaplayer就是微软的那个的包装。
      

  11.   

    算啦,还是不知道为什么,给点辛苦分吧。我自己估计是ActiveForm和ActiveX有区别的。