Windows 2008 ターミナル サーバー (64 ビット) で実行されている内部アプリにhttps://code.google.com/p/twaindotnet/を使用しようとしています。このライブラリは 64 ビット マシンではネイティブに使用できず、このライブラリ (およびそれを使用するすべてのアプリ) は x86 プラットフォームを対象としてコンパイルする必要があるという事実について、いくつかのコメントを見つけました。(私はVS2010を使用しています)ただし、問題は次のとおりです。
- サンプル アプリケーション - TestAppWpf (TwainDotNET パッケージから) - (サーバー上で 64 ビット モードで実行されている) 任意の CPU をターゲットとしてコンパイルすると、(当社の) サーバー上で正常に動作します。
- Unity/MEF で Prism を使用する私の (最も単純なサンプルでも) アプリケーションは、「不正な形式のプログラムをロードしようとしました (HRESULT からの例外: 0x8007000B)」という例外で常にクラッシュします。
[使用されるコードは常に同じです:
Loaded += delegate
{
try
{
Twain _twain;
var hook = new WpfWindowMessageHook(App.Current.MainWindow);
_twain = new Twain(hook);
}
catch (Exception ex)
{
MessageBox.Show(GetText(ex, true), "twain", MessageBoxButton.OK, MessageBoxImage.Error);
};
};
キャッチ部分は現時点では愚かな「ダンプ」です...そして、twain_32.dll(DsmParent関数)ライブラリへの呼び出しが行われようとしている最初の場所で例外が発生します
[DllImport("twain_32.dll", EntryPoint = "#1")]
public static extern TwainResult DsmParent([In, Out] Identity origin, IntPtr zeroPtr, DataGroup dg, DataArgumentType dat, Message msg, ref IntPtr windowHandle);
]
- また、プロジェクトとライブラリ全体を再コンパイルして x86 をターゲットにしようとしましたが、それでも同様の結果が得られます - TestAppWpf は動作しますが、アプリは動作しません。
- 私の開発マシン (32 ビット) では、すべてが魅力的に機能することは言うまでもありません。
サンプル アプリと自分のアプリケーション (どちらも 64 ビット環境で実行されています) の違いを見つけようとして完全に失われました。
任意の提案/ヒント/またはトリックをいただければ幸いです。
マーティン・F.