MC95 - 加载摄像头抛出找不到PInvoke DLL'EMDKServices.dll'错误

时间:2014-09-12 20:23:26

标签: c# motorola-emdk

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

接收错误的原因可能是:无法找到PInvoke DLL' EMDKServices.dll'。启用相机时?

我让他们尝试默认的演示应用程序并加载并拍摄照片而不会出现问题。

使用EMDK for .Net 2.8版

2 个答案:

答案 0 :(得分: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的计算机上获取驾驶室:C:\ Program Files(x86)\ Motorola EMDK for .NET \ v2.8 \ SDK \ Smart Devices \ wce500 \ armv4i \ symbol.all.arm.cab 一旦运行并安装在设备上,相机就能完美运行。

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

答案 1 :(得分:0)

使用PInvoke时,系统会在this之后搜索本机DLL。默认情况下,桌面应用程序的标准搜索顺序为:

  1. 加载应用程序的目录。
  2. 系统目录。使用GetSystemDirectory函数来获取 这个目录的路径。
  3. 16位系统目录。没有功能可以获得 此目录的路径,但会被搜索。
  4. Windows目录。使用GetWindowsDirectory函数来获取 这个目录的路径。当前目录。
  5. PATH环境变量中列出的目录。 请注意,这不包括指定的每个应用程序路径 通过App Paths注册表项。时,不使用App Paths键 计算DLL搜索路径。
  6. 关于您的问题,您可以使用工具process monitor来监控您的进程,它会调用日志进程的文件活动,这将显示进程如何搜索某个DLL。

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