1

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

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

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

将 EMDK 用于 .Net 2.8 版

4

2 回答 2

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 一旦运行并安装在设备上,相机就可以完美运行。

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

于 2014-09-23T13:52:36.143 回答
0

使用 PInvoke 时,系统会按照方法搜索本机 DLL。默认情况下,桌面应用程序的标准搜索顺序为:

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

对于您的问题,您可以使用工具进程监视器来监视您的进程,它会调用记录进程的文件活动,这将向您显示该进程如何搜索某个 DLL。

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

于 2014-09-12T20:47:38.610 回答