
VC++6.0を使用しています
新規作成
MFC AppWizard(exe)
新規
OK
[ステップ1]
ダイアログベース
次へ
[ステップ2/4]
次へ
[ステップ3/4]
次へ
[ステップ4/4]
終了
で作られた、雛型のexeをそっくりMFCのDLLに書き換えたい
と考えています
exeで作られたアプリを他のユーザーがVB6.0からDLLとして呼び出したいので書き換えて欲しいと頼まれました
MFCのDLLも雛型は簡単に出来上がるのですが
以下の関数を独立したオブジェクトにして、VB6.0からDLLの関数VBFUNC1として呼び出したいのですが、VBから呼び出すと
AfxEnableControlContainer();でアサートで引っ掛かってしまいます
ダイアログを使用したMFCのEXEをDLLとして使う場合の、コーディングについてご指南ください
BOOL CAaaApp::VBFUNC1()
//BOOL CAaaApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
CAaaDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
return FALSE;
}

No.1ベストアンサー
- 回答日時:
まず、DLLとEXEの違いについてわかっていますか?
DLLとは"他のEXEやDLLに対して機能を提供するもの"です。
単体では役に立たず、直接・間接にEXEから呼ばれて役に立つものです。
DLLを作成するには、DLLの役割を明確にしなければなりません。
通常、関数の形で提供することが多いですが、
クライアントがC++であれば、C++クラスを提供することも可能です。
この提供することを"エクスポート"と呼びます。
エクスポートするためには特別な指定が必要です。
詳細はこちらで参考になります
http://hp.vector.co.jp/authors/VA023539/tips/dll …
なお、VB6がクライアントの場合、DEFファイルも必要です。
http://www.geocities.jp/i_love_balard/myhome/vbd …
さらに, DLL側でメッセージ処理を行わせるには
いくつかの注意点があります。
http://msdn.microsoft.com/ja-jp/library/30c674tx …
色々大変です。
ただ単にVBからVC++のアプリを呼び出したいなら
わざわざDLLにするよりも
Shell関数のほうが簡単だと思います。
http://hanatyan.sakura.ne.jp/vbhlp/tap_shell.htm
有益な情報をありがとうございます
>まず、DLLとEXEの違いについてわかっていますか?
その点は、多分大丈夫です
MFCのDLLをVBから呼ぶのは、問題なく出来ます
>さらに, DLL側でメッセージ処理を行わせるには
いくつかの注意点があります。
リンク先をざっと読んでみましたが、大体意味はわかりました
ここは、今一度真剣に取り組む必要がありそうですね
>ただ単にVBからVC++のアプリを呼び出したいなら
わざわざDLLにするよりも
Shell関数のほうが簡単だと思います
確かに!その通りです
私もそれでいけばいいかな???と思っていたのですが・・・
プログラマーから、DLLで欲しいと要求されましたので、
ならDLLにしてあげましょうと、ちょこっと書いてみたら・・・あらら・・・
assertに引っかかるのですから、やってはいけないことをしているのは分かっています
呼び出しのコーディングレベルの問題でなく、構造的な問題が絡んでいるとは踏んでいましたが・・・奥が深そうです
もうちょっと頑張ってみたいと思います
No.2
- 回答日時:
ダイアログのDLL化はリソースの問題とかもあるので、一筋縄ではいきません。
単に、子プロセスとして呼ぶのではだめなのかもう一度確認したほうがいいとおもいます。
>ダイアログのDLL化はリソースの問題とかもあるので、一筋縄ではいきません。
そう思っていましたが…
#1の方のアドバイスを見て、ちょこちょこっと組んでみたら
あらあら…ものの10分で、動くDLLになってしまいました
やり方が無い訳でなく、難しい訳でもなく、単に知らなかった
いやはや、お恥ずかしい限りです(*^_^*)
>子プロセスとして呼ぶのではだめなのか
プログラマーたちからしてみれば、DLLで関数として簡単に呼び出せた方がうちの場合とても喜ばれます
Win32DLLのインターフェイスに準拠していれば、Winの上ならどな言語からでも使えますので、あとはお好きに使ってくださいで済みますので…
作る側も、面倒なことが必要無いんで楽でした…
ほんと馬鹿みたいに簡単です
やってみてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル VBA 「Sub Auto_Open(...
-
ダイアログの一部を半透明化す...
-
ホームページビルダー21で作成...
-
MFCのexeのプログラムを MFCのd...
-
MFC ポップアップメニューのチ...
-
コンボボックスのドロップダウ...
-
ボタンの配置を変更したい
-
C# ボタンコントロール内で文字...
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
皆さん、おはようございます♪ ...
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
グラフの交点の求め方(Excel)
-
【VB2008】 マウス操作の一時的...
-
連続で印刷すると画像が更新さ...
-
word
-
始点、終点の二つの座標と半径...
-
コンボボックス内の文字サイズ変更
-
[VB.net] DataGridViewの列ヘッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタンの表示の色、フォントを...
-
コンボボックスのドロップダウ...
-
C# ボタンコントロール内で文字...
-
リソースファイルとは・・・
-
メッセージボックスを大きくす...
-
MFCダイアログボックスを最前面...
-
フォーム上のリストボックスに...
-
ボタンの配置を変更したい
-
'int' から 'LPCSTR' に変換で...
-
ダイアログの上のテキストボッ...
-
メッセージボックスのボタン文...
-
vbscriptで、ファイル選択ダイ...
-
ダイアログボックスで指定した...
-
MFC ポップアップメニューのチ...
-
confirmダイアログの表示文字に...
-
ダイアログに表示されるアイコ...
-
VC++ MFC エラーコード C2248 ...
-
エディットコントロールの色の...
-
ツールチップの表示
-
CWnd::SetCapture()の動作について
おすすめ情報