ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

VC++を極める会?コミュの共有ライブラリの中でスレッドクラスを定義し、アプリからそのスレッド利用したい。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。
質問が少々長いので、新規トピックを立てさせて頂きました。

以下の質問について、どうかご教授願えますでしょうか?

【やりたい事】
あるアプリケーションでスレッドを利用する。スレッドクラスは、共有ライブラリの中で
定義している。

【結果】
リンク時に下記のエラーが発生します。
AAADlg.obj : error LNK2001: 外部シンボル ""public: static struct CRuntimeClass
const Thread::classThread" (?classThread@Thread@@2UCRuntimeClass@@B)" は未解決です
Debug/AAA.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

【開発環境】
・WindowsXP
・Visual C++ 6.0(サービスパック6)


当方で行った事は以下の通りです。

「MFCプロジェクト作成」
1. AAAという名前のプロジェクト作成する。
MFC AppWizard(exe)を選択。ウィザードは全てデフォルト。

2. DLLのThreadクラスヘッダをインクルードする。
BBB/Thread.hを記述する。

3. DLLをリンクする。
プロジェクトの設定→リンク→オブジェクト/ライブラリモジュールに、「BBB/Debug
/BBB.lib」を記述する。

4. ボタンを追加し、クリック時にスレッドが作成されるようにする。
OnButton1()に以下のコードを追加。
CRuntimeClass *pRuntime = RUNTIME_CLASS(Thread);
Thread *pThread = (Thread*)pRuntime->CreateObject();
pThread->CreateThread(0, 0, NULL);

「DLLプロジェクト作成」
1. BBBという名前のプロジェクト作成する。
MFC AppWizard(dll)を選択。MFCのスタティックライブラリを使用した標準DLLに
チェック。

2. Threadという名前のスレッドクラスを追加する。
クラスの種類は「MFCクラス」、基本クラスは「CWinThread」を継承する。


なお、AAAとBBBのフォルダ構成は以下の通り。
AAA - BBB     - Debug
      ・Thread.h   ・BBB.dll
      ・BBB.lib

コメント(1)

DLLをまたいで、MFCの派生クラスを利用する場合、そのDLLは
MFC拡張DLLで作成する必要があります。それ以外のDLL形式では
DLLをまたがってMFCの派生クラスを使うことはできません(独自に定義したクラスは利用可能)。

今回の場合は、DLLのプロジェクトをMFCの拡張DLLプロジェクトとして作成する必要があります。

それと、もし初めて拡張DLLを作るという場合はいろいろやる前にまずMSDNライブラリ(VC6のヘルプ)をよく読んでください。
注意点なども含めいろいろと書かれています。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

VC++を極める会? 更新情報

VC++を極める会?のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング