MFC を使用した C++ プログラミングは初めてで、開始方法がわかりません。
ここに行く...あなたはすべて、これらの対策のいくつかを実行する準備ができているかもしれません.
これを実現する 1 つの方法は、コードのエクスポートとインポートを指示するために使用できるヘッダー ファイルを作成することです。たとえば、ダイアログ クラスのヘッダー ファイルで、次のようなコードを作成すると、
#ifdef DllImpExp
#undef DllImpExp
#endif
#ifdef SomeDefineWeWillUseToControlImportExport
#define DllImpExp __declspec( dllexport )
#else
#define DllImpExp __declspec( dllimport )
#endif
同じヘッダーを使用して、ダイアログ クラスをエクスポートおよびインポートできます。次に、ダイアログ クラスの宣言で「DllImpExp」を指定する必要があります。例えば、
class DllImpExp SomeClass : public SomeBaseClass
dll を作成するプロジェクトでは、「SomeDefineWeWillUseToControlImportExport」のプリプロセッサ定義を追加します。これにより、コンパイラはダイアログ クラス コードをエクスポートするように強制されます。この時点で、ダイアログ クラスは別のオブジェクトによって使用される準備ができています。
クラスをエクスポートしたので、dll プロジェクトは同じ名前のインポート ライブラリを作成しました。そのライブラリは、ダイアログ コードを使用する他のプロジェクトへの入力として使用されます。それを行うにはいくつかの方法がありますが、そのライブラリを使用したいプロジェクトのリンカーへの入力としてリストするだけでうまくいくはずです。さらに、クラスがインポートされるように、プロジェクトで「SomeDefineWeWillUseToControlImportExport」を定義しないでください。
dll でダイアログ リソースにアクセスするには、いくつかの特別な手順を実行する必要があります。ダイアログを表示する前に、現在のリソース ハンドルをリソースを含む dll にポイントする必要があります。アプリは単一のハンドルを使用して、リソース (つまり、ダイアログ) を読み込む場所を認識します。1 つ以上の場所にダイアログがあるため、それを管理するには 2 つの関数を使用する必要があります。AfxGetResourceHandleを使用して、リソースの読み込みに使用される現在の既定のハンドルを保存する必要があります。次に、AfxSetResourceHandleを見て、dll からロードするデフォルト ハンドルを変更します。また、DLL からのダイアログでの作業が完了したら、保存したハンドルを復元することを忘れないでください。そうしないと、おかしな mfc アサートが発生する可能性があります。