1

Motorola MC95 スキャナで .net アプリケーションを開発しています。カメラの電源を入れようとすると、次のエラーが表示されます。PInvoke DLL 'EMDKServices.dll' が見つかりません。以前にこのエラーを受け取ったことがありますが、スキャナーが既に有効になっている場合は常にそうでした。4 台のスキャナーで同じコードを実行していますが、そのうちの 2 台でしか問題を再現できません。残念ながら、問題を再現できる 2 つのスキャナーは、私から数千マイル離れています。

エラーを受け取る原因として考えられるものは何ですか: PInvoke DLL 'EMDKServices.dll' が見つかりません。カメラを有効にするときは?

私は彼らにデフォルトのデモアプリを試してもらいましたが、問題なく読み込まれて写真が撮れました。

EMDK for .Net バージョン 2.8 の使用

4

2 に答える 2

1

これの実際の原因は、エラーをスローしていたスキャナーに「Symbol Managed Class Libraries」アプリケーションがなかったことです。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 を取得します。 armv4i\symbol.all.arm.cab これを実行してデバイスにインストールすると、カメラは完全に機能します。

このキャブを自分のキャブに組み込む方法を調査しましたが、ビルドのたびに多くのアフターワークを行わずにクリーンな方法を見つけることができませんでした。デバイスごとに1回実行されることを考えると、エラーメッセージは問題ありません。

于 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 に答える