C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 現行アプリを64bit環境で動作させるには?


(過去ログ 84 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■49882 / inTopicNo.1)  現行アプリを64bit環境で動作させるには?
  
□投稿者/ ろほ (1回)-(2010/05/21(Fri) 13:00:50)

分類:[雑談] 

お世話になります。


開発環境
・VB2005
・Access(mdb)
その他(外部ツール、参照設定等)
・JiveReport(帳票作成ツール)
・LHA.EXE , Unlha32.dll(バックアップデータの圧縮・解凍)
・clslib.dll(前々任者?がVB2005で作成の開発用クラス集)

上記で開発されたWindowsアプリケーションを引継ぎ、
メンテ等を行なっていくことになったのですが、
今後の課題として、表題の通り「64bit環境で動作させるには?」
といった内容について調査してみようという事になりまして…

現状はもちろん、32bit環境が動作環境である事は
各ユーザーには周知してあるはずなので急を要する話ではないかもしれませんが
近頃では、店頭モデルでも64bit機はよく見かけるそうですし、故障の際に
詳しく見ないでそれらを購入されるケースもでるかもしれませんし、どのみち
いずれ(近いうちに?)対応する時が来るから…と思った次第です。

今のところWindowsXPで上記開発環境は手近にありますが
それ以外、自由にいじれる環境がまだ周りにない上、ほぼ初級メンバーで
まずはネット調査から?どう調べていこうか?と初手から躓いております。

適切かどうかは分かりませんが、あえて「雑談」とさせて頂きましたので
以下は適当なイメージで書きますが
「まずは64bit開発機を用意しろ」とか「VB2005から移行しろ」とか何でも構いませんので、
実現させるための色々なお話や、情報・助言が聞ければと思い投稿しました。

※書いていくうちにグダグダの長文になってしまいました。ご勘弁下さい。

引用返信 編集キー/
■49883 / inTopicNo.2)  Re[1]: 現行アプリを64bit環境で動作させるには?
□投稿者/ aetos (297回)-(2010/05/21(Fri) 13:14:41)
2010/05/21(Fri) 13:44:28 編集(投稿者)

No49882 (ろほ さん) に返信
<del>32bitアプリはそのまま64bit OSで動作しますので、気にすることはありません。</del>

そっか、AnyCPU だと気にすることありましたね。フォローありがとうございます。
引用返信 編集キー/
■49885 / inTopicNo.3)  Re[1]: 現行アプリを64bit環境で動作させるには?
□投稿者/ 魔界の仮面弁士 (1655回)-(2010/05/21(Fri) 13:33:37)
2010/05/21(Fri) 14:03:47 編集(投稿者)

No49882 (ろほ さん) に返信
> ・Access(mdb)
Microsoft からは、Jet 用の 64bit 用プロバイダが提供されていなかったはずです。
そのため、Microsoft.JET.OLEDB.4.0/3.51 を使って mdb へアクセスする場合には
あらかじめ x86 としてビルドしておく必要があります。

なお、ACE 用のものであれば、Office 2010(X64版) にて提供されます。
(64bit用の Microsoft.ACE.OLEDB.12.0)

> 表題の通り「64bit環境で動作させるには?」
Any CPU としてビルドしていた場合、64bit環境で動作させれば
そのまま 64bit アプリとして動作します。

一方、x86 としてビルドしていた場合は、32bit 環境でも 64bit 環境でも
32bit アプリとして動作します(64bit 環境では WOW64 で動作)。
また、X64 としてビルドした場合には 64bit 専用アプリとなります。

なお、Visual Studio 2005, 2008, 2010 の Express Edition を
利用していた場合、Any CPU 固定となりますので注意してください。
http://msdn.microsoft.com/ja-jp/library/5b4eyb0k.aspx
(<PlatformTarget> タグを直接編集すれば、x86 でビルドさせる事も可能)

> その他(外部ツール、参照設定等)
それらのライブラリが、64bit対応しているかどうかを個別に調べてみてください。
その状況によって対策が異なってくるでしょう。

・64bit対応版が無いため、x86 としてビルドし、32bitのまま動作させる。
・64bit対応版はあるが、32bit版とは互換性が無いため、再コーディングが必要。
・32bit/64bit 両対応のため、特に何もする必要が無い。

このほか、アンマネージの API を利用している場合にも注意してください。
Win64 ではポインタが64ビット長となります。なので、IntPtr.ToInt32 を
無条件で使っているところがあれば、判定処理を追加する必要があるでしょう。
また、Int32 型として宣言された引数があった場合、それが Int32 のままで
良いのか IntPtr にすべきなのかも確認しておいてください。

> ・JiveReport(帳票作成ツール)
X64 版が存在します。ただし、x86版JiveReportと同じ環境では使用できません。

> ・LHA.EXE , Unlha32.dll(バックアップデータの圧縮・解凍)
LHA.EXE 自体は 16bit コンソールアプリです。64bit 環境では動作しません。

Unlha32.dll は 32bit ライブラリです。64bit 環境では WOW64 で動作させてください。
64bit 版ライブラリも公開予定…という話が以前ありましたが、まだのようですね。

> ・clslib.dll(前々任者?がVB2005で作成の開発用クラス集)
特に指定が無ければ、Any CPU としてコンパイルされているはずです。
なので、64bit 環境では 64bit ライブラリとして動作することになると予想。
引用返信 編集キー/
■49886 / inTopicNo.4)  Re[2]: 現行アプリを64bit環境で動作させるには?
□投稿者/ todo (9回)-(2010/05/21(Fri) 14:01:41)
VB2005のプロジェクトで「プラットフォームターゲット」を「Any CPU」にしておけば、
32bit環境では32bitアプリとして動作し、64bit環境では64bitアプリとして動作します。
ただし、使用しているライブラリーが32bitのままだと問題が発生する可能性があります。
たとえば、Unlha32.dllを64bitから呼び出すとエラーになります。
ライブラリーも含めて64bit対応できないのであれば、「プラットフォームターゲット」は
32bit固定で出荷することをお勧めします。

参考
http://niyodiary.cocolog-nifty.com/blog/2009/03/clzh-5b1d.html
引用返信 編集キー/
■49891 / inTopicNo.5)  Re[2]: 現行アプリを64bit環境で動作させるには?
□投稿者/ ろほ (2回)-(2010/05/21(Fri) 16:26:58)
魔界の仮面弁士さん、aetosさん、todoさん返信ありがとうございます。

ちょっと最初の書込みでは書いていませんでしたが、今回調査してみようと思い立った経緯として
以前にWindows7の実行環境で動作テストする際に、64bit環境だとアプリをインストールする段階で
Setup.exeが正常に動作しなかったという報告書(メモですが)を見たのがきっかけでした。
# 必須コンポーネントを起動条件に加えているため*.msiではなくsetup.exeから起動との事

皆さんの回答を拝見させていただき、
もしかしたらWindowsアプリケーション自体だけではなく
インストーラ(デプロイメントプロジェクトと呼ぶ?)の方も
ビルド設定を変更する必要があったのでは?と思いました。

また、教えていただいた各ビルド設定については

>> ・Access(mdb)
> Microsoft からは、Jet 用の 64bit 用プロバイダが提供されていなかったはずです。
> そのため、Microsoft.JET.OLEDB.4.0/3.51 を使って mdb へアクセスする場合には
> あらかじめ x86 としてビルドしておく必要があります。
といったお話や

>>・JiveReport(帳票作成ツール)
> X64 版が存在します。ただし、x86版JiveReportと同じ環境では使用できません。
といったお話から

>・64bit対応版が無いため、x86 としてビルドし、32bitのまま動作させる。

>32bit固定で出荷することをお勧めします。
こちらの方法が本アプリには一番適切かと思いました。
前述の通り、まだテストできる実行環境がないためすぐ試す事はできないのが残念ですが。

また、
>>・LHA.EXE , Unlha32.dll(バックアップデータの圧縮・解凍)
> LHA.EXE 自体は 16bit コンソールアプリです。64bit 環境では動作しません。
>
> Unlha32.dll は 32bit ライブラリです。64bit 環境では WOW64 で動作させてください。
> 64bit 版ライブラリも公開予定…という話が以前ありましたが、まだのようですね。
こちらについては、自分達でもちょっと分からない事が多く、はじめは圧縮と解凍で
利用する物が異なるのかと思っていましたがUnlha32.dllで圧縮・解凍はともに出来る
ような感じですので何故LHA.EXEも必要なのか(セットでないと動かないとか?)
まだ理解できてません。(この辺はちょっと余談気味な書込みですいません)

それと最後の
>>・clslib.dll(前々任者?がVB2005で作成の開発用クラス集)
> 特に指定が無ければ、Any CPU としてコンパイルされているはずです。
> なので、64bit 環境では 64bit ライブラリとして動作することになると予想。
こちらも、32bit固定でいくとした場合、同じくクラスライブラリプロジェクトを
x86でビルドし直した後の新たな clslib.dll を本アプリのプロジェクトで参照し直す
ようにした方が良いのでしょうか?

※用語の使い方など間違っていたらすいません。
引用返信 編集キー/
■49894 / inTopicNo.6)  Re[2]: 現行アプリを64bit環境で動作させるには?
□投稿者/ サワリン (1回)-(2010/05/21(Fri) 16:37:03)
>>・clslib.dll(前々任者?がVB2005で作成の開発用クラス集)
> 特に指定が無ければ、Any CPU としてコンパイルされているはずです。
> なので、64bit 環境では 64bit ライブラリとして動作することになると予想。

これは、もしAny CPUでコンパイルされていても、x86のアプリから呼び出されれば
x86で動作するんじゃないですか?
私の認識では、アプリ(exe)をx86でコンパイルすれば、後はそれでいいのではないかと思うのですが、
どうでしょうか。
引用返信 編集キー/
■49898 / inTopicNo.7)  Re[3]: 現行アプリを64bit環境で動作させるには?
□投稿者/ 中博俊 (1402回)-(2010/05/21(Fri) 17:28:44)
てかまずはx64マシン普段から使ってみるべき。
使わずにあれこれ言っても本当に動くかどうかは分からないだろうし。

アプリをちゃんと対応させる勘所は

http://cid-ea976d26695b188e.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/Windows%2064bit%20%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80.pptx

当分おいとくので参照
引用返信 編集キー/
■49901 / inTopicNo.8)  Re[4]: 現行アプリを64bit環境で動作させるには?
□投稿者/ ろほ (3回)-(2010/05/21(Fri) 20:23:31)
サワリンさん返信ありがとうございます。

その時(環境が整った時)が来たら必ず確認してみます。


中博俊さん(管理人さん?)返信ありがとうございます。

使わずに、あれこれ言ってはおりますが(ごめんなさい)
使えずに、いる間はあれこれ調査だけでもと思っております。
# その時が来て全く手が動かないとかないように…それしか今は出来ないので^^;

> 当分おいとくので参照
リアルタイムで作業している問題ではなかったので、悩んだ結果「雑談」にさせてもらいましたが
すごく貴重な資料を頂いたようで、本当にありがとうございます。
「一般的な注意点」は魔界の仮面弁士さんから頂いた話とも通じる所があり、確かに勘所なんだなと。

あとはそれこそ
> 使わずにあれこれ言っても本当に動くかどうかは分からないだろうし。
だと思いますので、その時が来るまで今回教えて頂いた内容について理解を深めたいと思います。
その時がきてまた分からない事ができたら、今度はちゃんと「質問」スレでお世話になります。

どうも有難うございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -