VC6とVC9の違い – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] VC6とVC9の違い

固定ページ 2 / 2

あ
 あ
(@あ)
ゲスト
結合: 23年前
投稿: 47
 

互換性ない
一方はMFC4.dllで別のdllだからMFCオブジェクト渡すと危険
携帯なので以下略


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

VC6 と それ以降のバージョンへの過渡期によくある問題ですね。
手っ取り早いのは、過渡期を過ぎるまでVC6, VC9のどちらでもビルド可能な
ソースコードにしてしまうことです。

注意深くやれば、ほとんどのソースコードは共有可能です。
どうにも互換性のない部分だけ、以下の#ifで処理分けします。

#if _MSC_VER > 1200 // VC9
#else // VC6
#endif

DLL側がVC9に対応するまでは、VC6でビルドして、
DLL側がVC9に対応したら、VC9でビルドし直す。

私の場合、そんな方法で対処した記憶があります。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> 皆さんの言っていることと矛盾しているようですが、実際できています。
確かに bun さんがおっ社ているように拡張DLLだと DLL 側からAfxGetApp()で
アプリ側の CWinApp* が取れるようですね。
でもVC6とVC9ではCWinApp自身が同じではないので非常に危険です。
(と言うより、互換性がないのでやっちゃいけないのでは...)

つまりExe側でなんとか出来るような問題ではないでしょう。
> 一方はMFC4.dllで別のdllだからMFCオブジェクト渡すと危険
この一語に尽きる。


返信引用
まなみ
 まなみ
(@まなみ)
ゲスト
結合: 15年前
投稿: 14
Topic starter  

皆さん、ありがとうございます。

結局、そう簡単にはできないみたいですね。
簡単と言うより無理に等しいと判断した方がよさそうですね。

因みになんですが、maru様も試されたみたいですが、
拡張DLLでAfxGetApp()の使用は、どうなんでしょうか?
本来あってはならないもの、それとも結果OKのもの??

今後、DLLを作成する場合のノウハウとして。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

> 拡張DLLでAfxGetApp()の使用は、どうなんでしょうか?
> 本来あってはならないもの、それとも結果OKのもの??

EXE と DLL の MFCのバージョンが同じなら当然あり。
違うなら当然あってはならない。

だと思う。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

http://msdn.microsoft.com/ja-jp/library/h5f7ck28.aspx
より

クライアント アプリケーションおよび拡張 DLL の両方で、同じバージョンの
MFCx0.dll を使用する必要があります。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> 拡張DLLでAfxGetApp()の使用は、どうなんでしょうか?
> 本来あってはならないもの、それとも結果OKのもの??
以下に全ての回答がありました。
http://msdn.microsoft.com/ja-jp/library/h5f7ck28(v=VS.80).aspx
「拡張 DLL では、CWinApp の派生クラスをインスタンス化はしないでください。その代
わりに、このオブジェクトの提供をクライアント アプリケーション (または DLL) に依
存します。」
つまり拡張DLLは正しい方法、それ以外ではNG。

また、MFCのバージョンの話も
「クライアント アプリケーションおよび拡張 DLL の両方で、同じバージョンの
MFCx0.dll を使用する必要があります。」
とあります。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

ありゃ、かぶっちゃいましたね。

ちょっと修正。
> つまり拡張DLLは正しい方法、それ以外ではNG。
つまり拡張DLL「で」は正しい方法、それ以外ではNG。


返信引用
まなみ
 まなみ
(@まなみ)
ゲスト
結合: 15年前
投稿: 14
Topic starter  

> つまり拡張DLL「で」は正しい方法、それ以外ではNG

なるほど。わかりました。
ありがとうございます。

VCのバージョンアップの度にこのような問題がでてくるのであれば
拡張DLLを使用しない方がよさそうですね。
勉強になりました。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

私の場合は、MFCの拡張DLLは、1つのソリューション(ワークスペース)にEXEとDLL
双方のプロジェクトを含める場合にだけ使うようにしています。

常に同時にビルドがかかる状態なら、バージョンの不一致問題は起きないわけで、
そうなるとデメリットよりメリットが勝るからです(^-^)


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました