- - PR -
64ビット版VistaでDataGridViewにデータが表示されない(Vistaでの注意事項は?)
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-03-04 20:04
あ、そうなんですか!! 知りませんでした。 それじゃあ動かないのは当然ですね。 デザイナーでテーブル設計をしている時にクエリの実行で値が表示できているのでてっきりx64でも動くものだとばっかり思い込んでいました。 最終的に動かないんだったらデザイン時に教えてもらいたいものです。 アプリの設定で「この接続は32ビットにする」ってことはできないのでしょうか? [ メッセージ編集済み 編集者: Haru 編集日時 2009-03-04 20:05 ] | ||||||||||||
|
投稿日時: 2009-03-04 22:02
C# や VB.NET で作成したアセンブリは、Portable Executable ファイルではありません。IL と呼ばれる、中間言語です。実行時に、Just In Time コンパイラにより、ネイティブ コードにコンパイルされて、実行されます。このとき、x64 でも x86 でも、どちらにでもコンパイルしていいよというのが、Any CPU です。 ということで、「この接続は32ビットにする」ではなく、「このコードは32ビット(x86用)にする」という設定をします。その方法は、2009-03-04 00:19 の投稿でされているとおりです。 ついでに、Visual Studio も32ビットです。 | ||||||||||||
|
投稿日時: 2009-03-04 23:41
どちらでも良いというのはどちらの環境でも動ける条件が揃って初めて選べるのですから データソースの選択で出てくるDBはリリースしている環境をVisual Studioに教えるような 仕掛けがあってターゲットCPUに沿った選択しかできないようになっていれば今回のような 間違いはしなくて済むと思います。 それができなくてもせめてデータソースの選択時にサポートしている環境を教えてもらえれば 開発者が気付くことができると思うのですが。 どこかにサポート環境が纏められていないでしょうか?
「この接続は」としたのは、例えば複数のDBと接続する時に基本的に64ビット環境で接続するが、 32ビットしかサポートしないDBに対しては32ビット(のインターフェース)で接続するということを やりたいからです。 (本体部分が64ビットで、呼ばれたDLLだけ32ビットで動くということができるのかは分かりませんが・・) ちなみに、SQL Server Compact 3.5については http://www.microsoft.com/downloads/details.aspx?FamilyID=dc614aee-7e1c-4881-9c32-3a6ce53384d9&displaylang=ja#filelist からx64用のDLLを見つけることができました。 Accessの64ビット版はまだ見つけることができません。
ターゲットOSがx86だということでしょうか? | ||||||||||||
|
投稿日時: 2009-03-05 07:34
IL へのコンパイル時には、それはわかりません。x64, x86 両方に対応したデータベースなら、実行時までわかりません。JIT コンパイラは、必要なメソッドだかクラスの単位でコンパイルします。ですので、呼び出しをかけるまで、32ビットしかないということはわかりません。 逆に、技術者なら、それくらい調べるのが当たり前ではないでしょうか。 あと、インストール時に調べて、インストールするファイルを変えるという方法もあります。
各社各様なデータベース製品を、マイクロソフトがまとめなければならないのでしょうか。 それとも、「言い出しっぺの法則」により、まとめてくださるのでしょうか。
それはできないと、先に書いていませんか? | ||||||||||||
|
投稿日時: 2009-03-05 12:08
ちょっと私の言い方に問題があるようで、うまく伝わっていないような感じで残念です。 「技術者なら、それくらい調べるのが当たり前」というのはおっしゃる通りで同感です。 (といいつつ、ここで質問させて頂いていますが) なんとかニュアンスを伝えたいのでもう少し書かせて下さい。 私が言いたかったのは、デザイン時に「サポートしている接続はこれだけ」というリストを 出しているのですが、配布先にそのDLLが存在するか否かは不明なものの、少なくとも 開発(デザイナーの実行マシン)しているマシンにはDLLが存在しないとデバッグもできない 訳で、そうなると例えば今回の用にX64のDLLがない接続を選んだ場合、AnyCPUだとX64では 動かないことが明白な訳ですから警告を出すべきではないかと考えたのです。 私は64ビットマシンで開発し、デザイン時にテーブルの変更もでき、またクエリの実行でも 成功していたので、当然そのまま動くものだと考えてしまいました。 これについては調査不足だったことは否めませんが、せっかくここまで進化してきた開発環境 なのに、デザインできるけどデバッグできない状況が容認されてしまっているのが残念なのです。 ライセンスの関係でDLLは一緒に配布できない状況があって別に用意する必要があったとしても 少なくともデザインできたら当然デバッグもできないとおかしいのではないでしょうか? どうあるべきかみたいな話になってしまいましたが、皆さん色々ご意見をお持ちだと思います。 仕様の話なので私の意見を言ったところでどうにもなりませんが、私が言いたかったのは デザインできたのにデバッグできないのはおかしいということなのです。
アプリの配布時に変更するということですね。 ご意見ありがとうございます。 勉強させて頂きます。
それはできないと、先に書いていませんか? [/quote] 失礼しました。 Jitta様には貴重なご意見を頂戴しておりますが、今後もよろしくお願いします。 | ||||||||||||
|
投稿日時: 2009-03-05 19:25
なるほど、そういう意味でしたか。失礼しました。 今、移動中なのでうろ覚えで書きます。IsWow64Process という WIN32API が有ります。コイツを呼び出すように、修正してみて下さい。デバッグ実行では、おそらく TRUE 、つまり32ビット アプリケーションだと返ってくると思います。 × タスク マネージャーの表示する列を選べば、何ビット アプリケーションか表示されたような? Process Explorerだった。 [ メッセージ編集済み 編集者: Jitta 編集日時 2009-03-06 14:24 ] | ||||||||||||
|
投稿日時: 2009-03-06 11:27
MSDNやその他のページで色々調べてみたのですがVBから呼び出す方法がわかりませんでした。 申し訳ありませんがVBから呼び出すためのコードを教えて頂けませんでしょうか? | ||||||||||||
|
投稿日時: 2009-03-06 14:16
pinvoke.net で探します。 http://www.pinvoke.net/default.aspx/kernel32/IsWow64Process.html |