dポイントプレゼントキャンペーン実施中!

VC++6.0にてMFCを使うDLLを作成しています。
関連HPを参考になんとかDLLを作ることが出来ました。

そこで今度はDLL側でダイアログボックスを作成して表示させようとしたところうまくいきません。
エラーも無くスルーされてしまいます。
こういう使い方は出来ないのでしょうか。

↓DLL関数のソースファイルです。
----------------------------------------------
#include "StdAfx.h"
#include "Defs.h"
#include "Func.h"
#include "resource.h"

#include "testdlg.h"
#include "dlg2.h"
int WINAPI DllFunc( CString &p_rcStr, CWnd *p_pcWnd )
{
TestDlg dlg;
Cdlg2 dlg2;

dlg.ps = p_rcStr;

dlg2.DoModal();//なにも出ない

AfxMessageBox(p_rcStr);//コレはOK

dlg.DoModal();//何もでない

return TRUE;
}
--------------------------------------------

A 回答 (1件)

理由としては


1.ダイアログ側で初期化時に不整合
2.リソースIDのバッティング

1の場合・・・ダイアログをEXEで単独で表示できるかを
確認したらよいかと思います。
2またはダイアログ側に問題が無い場合・・・DLLでのダイ
アログ使用時のトラブルは多分大体こっちです。
DLLと呼び出し側EXEの「resource.h」でコントロー
ルIDが重複しているとダイアログは表示されません。
重複ID値のリソースで数値を変更して(リソースエディ
タの[プロパティ][ID]で『IDC_XXX=301』のように入れ
る)表示されるようになれば、これが原因です。

根本的な解決は共有DLLなら(普通こっち)
---------------------------------------
int WINAPI DllFunc( CString &p_rcStr, CWnd *p_pcWnd )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); //←コレ
---------------------------------------
を先頭行に入れてください。参考↓
http://www-kobayashi.ctrl.titech.ac.jp/members/m …

拡張DLLなら、↓の参考URLから「拡張DLLの
リソース」に飛んで見て下さい(DLLインスタンスハン
ドルは DllMain から取る)

参考URL:http://homepage2.nifty.com/DSS/VCPP/DLL/dllresou …
    • good
    • 0
この回答へのお礼

有り難うございます!!!!

IDの重複だったようです。

AFX_MANAGE_STATE(AfxGetStaticModuleState()); //←コレ

で一発解決でした。

とても助かりました。

お礼日時:2002/07/18 09:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!