前に作った「グローバルフックでランダムな文字列を入力させるdll」、C#から呼び出すのを試してみました。 dllを無駄にx64で作ったのでwpfのテストコードの構成も無駄にx64に。 簡単なコードしか書いてないんですが、わけのわからないエラーが出ました。
エラーが出たのはdllを呼び出す部分ではなくxamlです。 曰く。
- CLR 名前空間が定義されていません。'clr-namespace' URI が、アセンブリに含まれていない名前空間 'プロジェクト名' を参照しています。
clr-namespaceのまわりは以前作ったコードのコピー&ペーストだし、プロジェクトの名前空間を見つけられないなんていう状況がわかりません。 しばらく足止めをくらいました。
ネットで検索して、やっとそれらしき解決策を発見。
斜め読みしかしてませんが、「開発中はx86かAny CPUで作って、デプロイするときだけx64にしろ」と書いてありますね。 xaml designerのバグってことになってます。 Any CPUにしてみたら問題なく動きました。 x64のdllもちゃんとロードできました。
Visual Studio 2010 expressではx64の扱いが悪いですね。 どうやら64bitのdllを使うときもx64にしない方が良さそうです。 Any CPUで作っておいて、起動時に64bit版のdllが読めなかったらエラーをはいてアプリケーション終了とかにするのが親切なのかな?
ちなみに、フレームワークが64bitで動作しているかどうかの簡易チェックコードは、
if (IntPtr.Size == 8) { MessageBox.Show("64bit"); }