ActiveX在本机能运行,在其他电脑不能运行

weixin_41979084 2018-04-16 09:22:18
制作的ActiveX在本机上能运行,但在其他电脑上使用时,可以弹出运行阻止的内容,但一点击按钮就报错。是什么问题啊。
我的ActiveX是在64位电脑上制作的,想在32位或64位电脑上都能使用。

...全文
904 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41979084 2018-04-17
  • 打赏
  • 举报
回复
现在是除了自己调式的这台机,其他电脑都用不了。网页点击按钮可以进入ActiveX,但一运行到ActiveX里面调用的外部dll,就报错了,显示IE停止运行。我想是不是句柄那里获取函数没有获取到,但为什么在本机是可以的呢。而且ActiveX的dll是可以通过regsvr32注册的,但调用的那个外部dll怎么都注册不了。 .h代码: typedef int (_stdcall*MF_Getsnr)(BYTE,BYTE,BYTE *pBuffer,BYTE *pBuf); MF_Getsnr _MF_Getsnr; HINSTANCE hmod = LoadLibrary(L"E:\\FROMYANTAI\\Debug\\function.dll"); if (hmod == NULL) { FreeLibrary(hmod); } else { _MF_Getsnr = (MF_Getsnr)GetProcAddress(hmod, "MF_Getsnr"); } .cpp代码(部分): STDMETHODIMP Cytiicrj::Readsnr_BSTR(BSTR* out) { int nRet=_MF_Getsnr(xx,xx,xx,xx); //运行到这里就报错了 }
zgl7903 2018-04-17
  • 打赏
  • 举报
回复
MF_Getsnr _MF_Getsnr = NULL; //初始化 HINSTANCE hmod = LoadLibrary(L"E:\\FROMYANTAI\\Debug\\function.dll"); if (hmod != NULL) { _MF_Getsnr = (MF_Getsnr)GetProcAddress(hmod, "MF_Getsnr"); if(_MF_Getsnr == NULL) { MessageBoxA(NULL, "Miss function", "Error", MB_OK); } } else { MessageBoxA(NULL, "LoadLibrary failed!", "Erro", MB_OK); } STDMETHODIMP Cytiicrj::Readsnr_BSTR(BSTR* out) { int nRet=0; if(_MF_Getsnr) nRet =_MF_Getsnr(xx,xx,xx,xx); }
weixin_41979084 2018-04-17
  • 打赏
  • 举报
回复
自己顶,自己顶
weixin_41979084 2018-04-16
  • 打赏
  • 举报
回复
引用 7 楼 jszj 的回复:
[quote=引用 5 楼 weixin_41979084 的回复:] [quote=引用 2 楼 jszj 的回复:] 64位的程序,应该只能在64位上运行,但32位的程序可以在32位和64位上运行。 首先确定这台不能正常运行的电脑是不是64位的 其次确认下是不是缺少什么依赖的文件导致不能运行,还有IE加载控件的权限是否打开了,你的控件是否有写文件的动作,这个在IE里有很大限制。 可以在你的控件接口里加一些打印信息,看到哪一步开始报错,通常是你的代码没有处理一些异常导致的,比如打开一个文件,没有判断是否成功就直接去写或者读,而此时文件句柄可能是空的,如此就会导致程序崩溃
用的电脑是32位的,本机是64位的。在32位上不能用吗,要怎样才能在32位机上用啊。[/quote] “本机是64位的”,这关系 不大,说的是你的程序,你程序是64位的,而用的电脑是32位的,那就用不了[/quote] 哦哦,程序是32位的。本机正常运行,另外一台机(虚拟机)不能,可能还和那些有关系啊。权限什么的都是OK的。是不是要发布什么的啊。
red-fly 2018-04-16
  • 打赏
  • 举报
回复
引用 5 楼 weixin_41979084 的回复:
[quote=引用 2 楼 jszj 的回复:] 64位的程序,应该只能在64位上运行,但32位的程序可以在32位和64位上运行。 首先确定这台不能正常运行的电脑是不是64位的 其次确认下是不是缺少什么依赖的文件导致不能运行,还有IE加载控件的权限是否打开了,你的控件是否有写文件的动作,这个在IE里有很大限制。 可以在你的控件接口里加一些打印信息,看到哪一步开始报错,通常是你的代码没有处理一些异常导致的,比如打开一个文件,没有判断是否成功就直接去写或者读,而此时文件句柄可能是空的,如此就会导致程序崩溃
用的电脑是32位的,本机是64位的。在32位上不能用吗,要怎样才能在32位机上用啊。[/quote] “本机是64位的”,这关系 不大,说的是你的程序,你程序是64位的,而用的电脑是32位的,那就用不了
赵4老师 2018-04-16
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll 64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html 64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html
weixin_41979084 2018-04-16
  • 打赏
  • 举报
回复
引用 3 楼 worldy 的回复:
ActiveX在别的机器上没有注册吧?
ActiveX注册了,不过ActiveX调用的dll没注册,注册不了,报错了:模块已加载,但找不到入口点。用了网上的方法也不行。而且这个调用的dll在本机上也是这样的,但在本机就能运行。
weixin_41979084 2018-04-16
  • 打赏
  • 举报
回复
引用 2 楼 jszj 的回复:
64位的程序,应该只能在64位上运行,但32位的程序可以在32位和64位上运行。 首先确定这台不能正常运行的电脑是不是64位的 其次确认下是不是缺少什么依赖的文件导致不能运行,还有IE加载控件的权限是否打开了,你的控件是否有写文件的动作,这个在IE里有很大限制。 可以在你的控件接口里加一些打印信息,看到哪一步开始报错,通常是你的代码没有处理一些异常导致的,比如打开一个文件,没有判断是否成功就直接去写或者读,而此时文件句柄可能是空的,如此就会导致程序崩溃
用的电脑是32位的,本机是64位的。在32位上不能用吗,要怎样才能在32位机上用啊。
worldy 2018-04-16
  • 打赏
  • 举报
回复
ActiveX在别的机器上没有注册吧?
red-fly 2018-04-16
  • 打赏
  • 举报
回复
64位的程序,应该只能在64位上运行,但32位的程序可以在32位和64位上运行。 首先确定这台不能正常运行的电脑是不是64位的 其次确认下是不是缺少什么依赖的文件导致不能运行,还有IE加载控件的权限是否打开了,你的控件是否有写文件的动作,这个在IE里有很大限制。 可以在你的控件接口里加一些打印信息,看到哪一步开始报错,通常是你的代码没有处理一些异常导致的,比如打开一个文件,没有判断是否成功就直接去写或者读,而此时文件句柄可能是空的,如此就会导致程序崩溃
千寻港生惠香 2018-04-16
  • 打赏
  • 举报
回复
在你做的控件里面添加日志啊,先定位错误位置
red-fly 2018-04-16
  • 打赏
  • 举报
回复
引用 8 楼 weixin_41979084 的回复:
[quote=引用 7 楼 jszj 的回复:] [quote=引用 5 楼 weixin_41979084 的回复:] [quote=引用 2 楼 jszj 的回复:] 64位的程序,应该只能在64位上运行,但32位的程序可以在32位和64位上运行。 首先确定这台不能正常运行的电脑是不是64位的 其次确认下是不是缺少什么依赖的文件导致不能运行,还有IE加载控件的权限是否打开了,你的控件是否有写文件的动作,这个在IE里有很大限制。 可以在你的控件接口里加一些打印信息,看到哪一步开始报错,通常是你的代码没有处理一些异常导致的,比如打开一个文件,没有判断是否成功就直接去写或者读,而此时文件句柄可能是空的,如此就会导致程序崩溃
用的电脑是32位的,本机是64位的。在32位上不能用吗,要怎样才能在32位机上用啊。[/quote] “本机是64位的”,这关系 不大,说的是你的程序,你程序是64位的,而用的电脑是32位的,那就用不了[/quote] 哦哦,程序是32位的。本机正常运行,另外一台机(虚拟机)不能,可能还和那些有关系啊。权限什么的都是OK的。是不是要发布什么的啊。[/quote] 直接拷贝过去,然后手动注册控件即可 可以在你的控件接口里加一些打印信息,看到哪一步开始报错,通常是你的代码没有处理一些异常导致的,比如打开一个文件,没有判断是否成功就直接去写或者读,而此时文件句柄可能是空的,如此就会导致程序崩溃 大部分的问题和控件这种形式本身没有关系,具体的还是你要调试跟踪查看问题

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧