So-net無料ブログ作成
検索選択

トラブルシュート: 間違ったフォーマットのプログラムを読み込もうとしました。 [トラブルシュート]

メイン端末のM/BとCPUを交換したのでついでに
OSもWindows7のx64にして再構築しました。
今まで32Bit版のままだったのは使用しているペリフェラルの
一つのドライバのx64版が供給されていなかった為だったのですが
最近x64向けのドライバがでてきたのでちょうど良い機会と言うことで
切り替えました。
なにより64Bit版にするとメモリのアドレス空間がぐっと広くなるので
思い切って搭載メモリを増やせます。今回はとりあえず予算と相談して
8G積みました。

さて、OSやツールのインストールやら逃がしておいたデータの復旧やら
一日がかりになってしまいましたが取り敢えず元の環境に戻ったところで
自作ツール類の動作確認ですが予想どうりいくつか動かないものが
でてきました。

VBからCで作ったDLLを呼んでいるものはタイトルのメッセージ
出して全滅です。
原因はVB側がx64モードで動いて、x86向け(32Bit)にビルドされた
DLLを読んでいることです。
対策としてはDLLをx64をターゲットにリビルドするか、VB側を
x86をターゲットにリビルドしてツール自体をx86モードで動作
させるかの二択なので直ぐ解決...とはいかなかったのです。

自作ツールはVBもCもVisual Studio2010 Expressを使って作成している
のですが、まずCのDLLをx64にしちゃえと考えてプロジェクトを開いて
リビルドしようとしてみたらリビルドのターゲットプラットフォーム
選択するコンボボックスにx64がありませんでした。がーーん。
まぁ、無料で配布されている開発ツールなので色々制限はあるのは
仕方ないか...ということでx64への対応は諦めVB側をx86モードで
動かすということでVBのプロジェクトを開いてリビルドしようとしたら
今度はターゲットプラットフォームが「AnyCPU」しか選択できません。
AnyCPUではx86モードで動かしたくても勝手にx64で動いてしまいます。

さてさて困ったということで困った時のネット頼みで色々と探してみると
解決策発見。

VBのプロジェクトファイルの<PropertyGroup>タグの中に
<PlatformTarget>x86</PlatformTarget>
を追加するとx86向けのEXEをビルドしてくれるとのこと。

早速試して無事ツールを動かすことができました。めでたしめでたし。

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

関連リンク

メッセージを送る