- PR -

64ビット版VistaでDataGridViewにデータが表示されない(Vistaでの注意事項は?)

投稿者投稿内容
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-03-04 20:04
引用:

Jittaさんの書き込み (2009-03-04 18:31) より:
Access というか、Office System は、32ビット アプリケーションしか提供されていないと思います。
当然、JET Driver も、32ビットでしょう。64ビット アプリケーションは、32ビット DLL をロード出来ません。


あ、そうなんですか!!
知りませんでした。
それじゃあ動かないのは当然ですね。

デザイナーでテーブル設計をしている時にクエリの実行で値が表示できているのでてっきりx64でも動くものだとばっかり思い込んでいました。
最終的に動かないんだったらデザイン時に教えてもらいたいものです。

アプリの設定で「この接続は32ビットにする」ってことはできないのでしょうか?

[ メッセージ編集済み 編集者: Haru 編集日時 2009-03-04 20:05 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-04 22:02
引用:

Haruさんの書き込み (2009-03-04 20:04) より:
引用:

Jittaさんの書き込み (2009-03-04 18:31) より:
Access というか、Office System は、32ビット アプリケーションしか提供されていないと思います。
当然、JET Driver も、32ビットでしょう。64ビット アプリケーションは、32ビット DLL をロード出来ません。


あ、そうなんですか!!
知りませんでした。
それじゃあ動かないのは当然ですね。

デザイナーでテーブル設計をしている時にクエリの実行で値が表示できているのでてっきりx64でも動くものだとばっかり思い込んでいました。
最終的に動かないんだったらデザイン時に教えてもらいたいものです。

アプリの設定で「この接続は32ビットにする」ってことはできないのでしょうか?


C# や VB.NET で作成したアセンブリは、Portable Executable ファイルではありません。IL と呼ばれる、中間言語です。実行時に、Just In Time コンパイラにより、ネイティブ コードにコンパイルされて、実行されます。このとき、x64 でも x86 でも、どちらにでもコンパイルしていいよというのが、Any CPU です。

ということで、「この接続は32ビットにする」ではなく、「このコードは32ビット(x86用)にする」という設定をします。その方法は、2009-03-04 00:19 の投稿でされているとおりです。


ついでに、Visual Studio も32ビットです。
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-03-04 23:41
引用:

このとき、x64 でも x86 でも、どちらにでもコンパイルしていいよというのが、Any CPU です。


どちらでも良いというのはどちらの環境でも動ける条件が揃って初めて選べるのですから
データソースの選択で出てくるDBはリリースしている環境をVisual Studioに教えるような
仕掛けがあってターゲットCPUに沿った選択しかできないようになっていれば今回のような
間違いはしなくて済むと思います。
それができなくてもせめてデータソースの選択時にサポートしている環境を教えてもらえれば
開発者が気付くことができると思うのですが。
どこかにサポート環境が纏められていないでしょうか?

引用:

ということで、「この接続は32ビットにする」ではなく、「このコードは32ビット(x86用)にする」という設定をします。


「この接続は」としたのは、例えば複数の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ビット版はまだ見つけることができません。

引用:

ついでに、Visual Studio も32ビットです。


ターゲットOSがx86だということでしょうか?

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-05 07:34
引用:
どちらでも良いというのはどちらの環境でも動ける条件が揃って初めて選べるのですから データソースの選択で出てくるDBはリリースしている環境をVisual Studioに教えるような 仕掛けがあってターゲットCPUに沿った選択しかできないようになっていれば


IL へのコンパイル時には、それはわかりません。x64, x86 両方に対応したデータベースなら、実行時までわかりません。JIT コンパイラは、必要なメソッドだかクラスの単位でコンパイルします。ですので、呼び出しをかけるまで、32ビットしかないということはわかりません。
逆に、技術者なら、それくらい調べるのが当たり前ではないでしょうか。
あと、インストール時に調べて、インストールするファイルを変えるという方法もあります。

引用:
それができなくてもせめてデータソースの選択時にサポートしている環境を教えてもらえれば 開発者が気付くことができると思うのですが。 どこかにサポート環境が纏められていないでしょうか?


各社各様なデータベース製品を、マイクロソフトがまとめなければならないのでしょうか。
それとも、「言い出しっぺの法則」により、まとめてくださるのでしょうか。

引用:
(本体部分が64ビットで、呼ばれたDLLだけ32ビットで動くということができるのかは分かりませんが??)


それはできないと、先に書いていませんか?
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-03-05 12:08
引用:

IL へのコンパイル時には、それはわかりません。x64, x86 両方に対応したデータベースなら、実行時までわかりません。JIT コンパイラは、必要なメソッドだかクラスの単位でコンパイルします。ですので、呼び出しをかけるまで、32ビットしかないということはわかりません。
逆に、技術者なら、それくらい調べるのが当たり前ではないでしょうか。


ちょっと私の言い方に問題があるようで、うまく伝わっていないような感じで残念です。
「技術者なら、それくらい調べるのが当たり前」というのはおっしゃる通りで同感です。
(といいつつ、ここで質問させて頂いていますが)

なんとかニュアンスを伝えたいのでもう少し書かせて下さい。

私が言いたかったのは、デザイン時に「サポートしている接続はこれだけ」というリストを
出しているのですが、配布先にそのDLLが存在するか否かは不明なものの、少なくとも
開発(デザイナーの実行マシン)しているマシンにはDLLが存在しないとデバッグもできない
訳で、そうなると例えば今回の用にX64のDLLがない接続を選んだ場合、AnyCPUだとX64では
動かないことが明白な訳ですから警告を出すべきではないかと考えたのです。

私は64ビットマシンで開発し、デザイン時にテーブルの変更もでき、またクエリの実行でも
成功していたので、当然そのまま動くものだと考えてしまいました。
これについては調査不足だったことは否めませんが、せっかくここまで進化してきた開発環境
なのに、デザインできるけどデバッグできない状況が容認されてしまっているのが残念なのです。

ライセンスの関係でDLLは一緒に配布できない状況があって別に用意する必要があったとしても
少なくともデザインできたら当然デバッグもできないとおかしいのではないでしょうか?

どうあるべきかみたいな話になってしまいましたが、皆さん色々ご意見をお持ちだと思います。
仕様の話なので私の意見を言ったところでどうにもなりませんが、私が言いたかったのは
デザインできたのにデバッグできないのはおかしいということなのです。

引用:

あと、インストール時に調べて、インストールするファイルを変えるという方法もあります。


アプリの配布時に変更するということですね。
ご意見ありがとうございます。
勉強させて頂きます。


引用:
(本体部分が64ビットで、呼ばれたDLLだけ32ビットで動くということができるのかは分かりませんが??)


それはできないと、先に書いていませんか?
[/quote]

失礼しました。

Jitta様には貴重なご意見を頂戴しておりますが、今後もよろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-05 19:25
引用:
少なくとも 開発(デザイナーの実行マシン)しているマシンにはDLLが存在しないとデバッグもできない


なるほど、そういう意味でしたか。失礼しました。

今、移動中なのでうろ覚えで書きます。IsWow64Process という WIN32API が有ります。コイツを呼び出すように、修正してみて下さい。デバッグ実行では、おそらく TRUE 、つまり32ビット アプリケーションだと返ってくると思います。

× タスク マネージャーの表示する列を選べば、何ビット アプリケーションか表示されたような?

Process Explorerだった。

[ メッセージ編集済み 編集者: Jitta 編集日時 2009-03-06 14:24 ]
Haru
常連さん
会議室デビュー日: 2009/02/18
投稿数: 37
投稿日時: 2009-03-06 11:27
引用:

IsWow64Process という WIN32API が有ります。コイツを呼び出すように、修正してみて下さい。



MSDNやその他のページで色々調べてみたのですがVBから呼び出す方法がわかりませんでした。
申し訳ありませんがVBから呼び出すためのコードを教えて頂けませんでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-03-06 14:16
引用:

Haruさんの書き込み (2009-03-06 11:27) より:
MSDNやその他のページで色々調べてみたのですがVBから呼び出す方法がわかりませんでした。
申し訳ありませんがVBから呼び出すためのコードを教えて頂けませんでしょうか?


pinvoke.net で探します。
http://www.pinvoke.net/default.aspx/kernel32/IsWow64Process.html

スキルアップ/キャリアアップ(JOB@IT)