【问题标题】:MC95 - Loading camera throws Can't find PInvoke DLL 'EMDKServices.dll' errorMC95 - 加载相机抛出找不到 PInvoke DLL 'EMDKServices.dll' 错误
【发布时间】:2014-09-12 20:23:26
【问题描述】:

我正在摩托罗拉 MC95 扫描仪上开发 .net 应用程序,尝试打开相机时出现此错误:找不到 PInvoke DLL 'EMDKServices.dll'。我之前收到过这个错误,但它总是如果扫描仪已经启用。我在 4 个扫描仪上运行相同的代码,并且只能在其中两个上重现该问题。不幸的是,我们可以重现该问题的两台扫描仪距离我几千英里。

收到错误的可能原因是什么:找不到 PInvoke DLL 'EMDKServices.dll'。何时启用相机?

我让他们试用了默认的演示应用程序,它可以毫无问题地加载和拍照。

将 EMDK 用于 .Net 2.8 版

【问题讨论】:

    标签: c# motorola-emdk


    【解决方案1】:

    造成这种情况的实际原因是引发错误的扫描仪缺少“符号托管类库”应用程序。已确定,当直接从 Visual Studio 部署到扫描仪时,它会自动推送并安装此应用程序,但通过 cab 安装程序部署时,它不会被安装。修复是在应用程序启动时添加一个检查,以查看是否安装了库并向用户抛出错误。

    if (System.IO.Directory.Exists(@"\Windows\AppMgr\Symbol Managed Class Libraries\") == false)
    {
        DisplayMessage("Symbol Managed Class Libraries not detected. Please Install or contact help desk.", "Error");
    }
    

    要安装库,请在设备上运行以下 cab: 从安装了 EMDK 的计算机上获取 cab:C:\Program Files (x86)\Motorola EMDK for .NET\v2.8\SDK\Smart Devices\wce500\armv4i\symbol.all.arm.cab 一旦它运行并安装在设备上,相机就会完美运行。

    我研究了一种将这个驾驶室包含在我的驾驶室中的方法,但没有找到一种干净的方法来完成它,而无需在每次构建后都进行大量的后期工作。考虑到它是每台设备一次运行,我对错误消息很好。

    【讨论】:

      【解决方案2】:

      当使用 PInvoke 时,系统会跟随 this 搜索本地 DLL。默认情况下,桌面应用程序的标准搜索顺序是:

      1. 加载应用程序的目录。
      2. 系统目录。使用 GetSystemDirectory 函数获取 该目录的路径。
      3. 16 位系统目录。没有函数可以获取 此目录的路径,但会被搜索到。
      4. Windows 目录。使用 GetWindowsDirectory 函数获取 此目录的路径。当前目录。
      5. PATH 环境变量中列出的目录。 请注意,这不包括指定的每个应用程序路径 通过 App Paths 注册表项。 App Paths 键在以下情况下不使用 计算 DLL 搜索路径。

      对于你的问题,你可以使用工具process monitor来监控你的进程,它会调用日志进程的文件活动,它会告诉你进程如何搜索某个DLL。

      正如您所说,您的程序可以在某些机器上运行,而有些则不行。通过比较进程监视器的日志,您应该能够找到问题所在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 2012-07-25
        • 2018-07-22
        • 2012-03-13
        • 1970-01-01
        • 2014-04-26
        • 1970-01-01
        相关资源
        最近更新 更多