.net32位机器平台开发程序在64位上不能使用

?^man^ 2016-08-18 06:10:15
在32位电脑上开发了winform,引用客户给的dll文件(只有32位的)开发好的exe文件放到64位电脑上运行不起来,要运行开发好的winform要借助navisworks客户端才可以,64位电脑安装的navisworks是64 的,用32位电脑编译好x86后 直接运行exe


---------------------------

---------------------------
Autodesk.Navisworks.Api.RuntimeLoaderException: Cannot load suitable Navisworks runtime. Note that 32bit Navisworks Controls are not supported on 64bit OS except in DesignMode

在 Autodesk.Navisworks.Internal.ApiImplementation.ApplicationImpl.InitialiseErrorHandling(ApplicationConfig config)

在 Autodesk.Navisworks.Internal.ApiImplementation.ApplicationImpl.InitialiseResources(ApplicationConfig config)

在 Autodesk.Navisworks.Internal.ApiImplementation.ApplicationImpl.InitialiseApi(ApplicationConfig config)

在 Autodesk.Navisworks.Api.Controls.ApplicationControl.InitializeImpl()

在 Autodesk.Navisworks.Api.Controls.ApplicationControl.Initialize()

在 ICVPlugin.Program.Main(String[] args) 位置 F:\ICVPlugin\ICVPlugin\ICVPlugin\Program.cs:行号 211
---------------------------
确定
---------------------------

我若用64位电脑开发 调用客户给的dll文件接口会报错 如下
System.Runtime.InteropServices.COMException (0x80040154): 检索 COM 类工厂中 CLSID 为 {375745FA-EF64-4834-A92A-30115CE5EF32} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
在 System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
在 System.Activator.CreateInstance(Type type, Boolean nonPublic)
在 System.Activator.CreateInstance(Type type)

请问有什么解决办法么


...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2016-08-19
  • 打赏
  • 举报
回复
完全可以,反之不行。win x64向下兼容32
  • 打赏
  • 举报
回复
既然是你的 navisworks 的问题,就不是普通的什么 winform 的问题。你的 navisworks 要求你必须编译为 64 位目标程序,你的 COM 组件要求必须是 32 为目标程序,你考虑放弃一个吧!
吉普赛的歌 2016-08-19
  • 打赏
  • 举报
回复
比如: sqlite 的dll , 如果你只有 32 位的dll, 64位下绝对跑不起来。 没办法只能换 64 位的dll
吉普赛的歌 2016-08-19
  • 打赏
  • 举报
回复
引用 7 楼 qwertzxcvb 的回复:
[quote=引用 3 楼 johnliuyuan 的回复:] Autodesk.Navisworks这个程序集你在32位机上是什么版本,是不是换了平台该程序集的版本也不一样了?
其实安装navisworks软件会在Windows里的32和 64自动安装两个版本的dll文件,只是在开发平台上,我电脑要是64位的,改成x84 就会报第一个错误,改成x64就会报引用客户给的dll文件报错[/quote] 你客户的dll很可能是32位的, 所以会报错。 可以找客户要 64 位的dll
?^man^ 2016-08-19
  • 打赏
  • 举报
回复
引用 3 楼 johnliuyuan 的回复:
Autodesk.Navisworks这个程序集你在32位机上是什么版本,是不是换了平台该程序集的版本也不一样了?

其实安装navisworks软件会在Windows里的32和
64自动安装两个版本的dll文件,只是在开发平台上,我电脑要是64位的,改成x84
就会报第一个错误,改成x64就会报引用客户给的dll文件报错
?^man^ 2016-08-19
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
完全可以,反之不行。win x64向下兼容32
我若用64的电脑,编译的时候选择x86或者anycpu都没问题,但是若选择x86启动的时候要调用navisworks在c盘 windoqnet里的组件dll文件就会报第一个错误,我若改成x64或者anycpu 程序运行后调用客户给的接口就会报第二个错,我都已经无语了
?^man^ 2016-08-19
  • 打赏
  • 举报
回复
引用 1 楼 sssmmm 的回复:
用x86模式编译下看
我若用64的电脑,编译的时候选择x86或者anycpu都没问题,但是若选择x86启动的时候要调用navisworks在c盘 windoqnet里的组件dll文件就会报第一个错误,我若改成x64或者anycpu 程序运行后调用客户给的接口就会报第二个错,我都已经无语了
john_QQ:2335298917 2016-08-18
  • 打赏
  • 举报
回复
Autodesk.Navisworks这个程序集你在32位机上是什么版本,是不是换了平台该程序集的版本也不一样了?
yangguosheng 2016-08-18
  • 打赏
  • 举报
回复
编译的时候用anyCPU? 64位机器安装32位FrameWork
sssmmm 2016-08-18
  • 打赏
  • 举报
回复
用x86模式编译下看

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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