首页 > 技术文章 > 关于在64位系统上,使用APlayer,运行报错“找不到指定的模块”

wyynts 2017-06-30 10:12 原文

使用APlayer开发了一个C#程序,原先开发电脑是32位的,安装电脑也是32位,只需要将相应的文件打包,然后在system32文件夹中放入atl71.dll和D3DX9_43.dll,项目运转正常。但后来因为系统升级,换了台win10 64位的系统,开发时只需将项目的平台换成x86,但是打包后安装却报错,且system32下的两个dll已存在。经过一天的摸索,因为64位系统有个SysWOW64  文件夹,将所需的两个dll放入此文件夹,问题得已解决。

网上查出两个文件夹的区别

\Windows\SysWOW64  文件夹下存放32位的库和应用程序 (WOW64 == Windows on Windows 64 bit )

\Windows\System32  文件夹下存放64位的库和应用程序

 当安装32位的程序在64位系统上时,会把指定拷贝到system32的文件自动改为拷贝到SysWOW64下。

故而,缺失的两个dll应该放在SysWOW64  下。

以下是报错内容

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.IO.FileNotFoundException: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
   在 System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
   在 System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
   在 System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
   在 System.Windows.Forms.AxHost.CreateInstance()
   在 System.Windows.Forms.AxHost.GetOcxCreate()
   在 System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
   在 System.Windows.Forms.AxHost.CreateHandle()
   在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   在 System.Windows.Forms.AxHost.EndInit()
   在 TJSYXY.Airdrome.Server.frmMonitor.InitializeComponent()
   在 TJSYXY.Airdrome.Server.frmMonitor..ctor(String clientIp)
   在 TJSYXY.Airdrome.Server.Controls.CrewMonitorBoard.listView1_DoubleClick(Object sender, EventArgs e)
   在 System.Windows.Forms.Control.OnDoubleClick(EventArgs e)
   在 System.Windows.Forms.ListView.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

问题得已解决,有关个中关系,还不太清楚,只是记录保存下,也希望可以帮到有需要的各位

推荐阅读