はじめまして。
すみません。大変困ってます。助けてください。

DirectPlay8の初期化をするのに

HRESULT hr;

hr = CoCreateInstance( CLSID_DirectPlay8Peer, NULL,
CLSCTX_INPROC_SERVER,IID_IDirectPlay8Peer,
(LPVOID*) &g_pDP );

hr = g_pDP->Initialize( NULL, DirectPlayMessageHandler, 0 );

だけではできないのですが、どうしたらいいですか?
ヘッダーファイルが足りないだけでしょうか。
ヘッダーは
Dplay8.h
Wtypes.h
Objbase.h
を使用しています。

COMオブジェクトの使用方法が間違っているのかもしれません。
(COMをあまり理解していないため・・・)

DirectXのサンプルをみても全く理解できずに苦しんでいます。
すみません。お願いします。

A 回答 (2件)

初期化というか、hr が FAILED になるのは何を呼び出した時でしょうか?


その時の hr の値から判断するしかありません。

あとは、サンプルから削ったものを地道に調べる。
CoInitializeEx を呼び出すのを忘れていたりする事があります。
    • good
    • 0
この回答へのお礼

返答ありがとうございます.
初期化をするのを忘れていたようです.

hrの初期化ですが,CoInitializeExとCoInitializeとの違いは何なんでしょうか.
CoInitializeでは初期化ができるのですが,CoInitializeExでは
コンパイルエラーがでてしまうんです.

お礼日時:2001/12/24 18:04

>hrの初期化ですが,CoInitializeExとCoInitializeとの違いは何なんでしょうか.



あまり正確には知らないのですが、CoInitialize は COM で、CoInitializeEx は DCOM という事でしょうか。
ローカルな特性としては、CoInitialize は、CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) と同じだと思います。

COINIT_MULTITHREADED は全てのスレッドから無制限にアクセスできるようになって、COINIT_APARTMENTTHREADED はインスタンスを作成したスレッドだけが、そのインスタンスのメソッドを実行できるようにして、速度を稼いでいるものだと思います。

>コンパイルエラーがでてしまうんです.
objbase.h をインクルードした時点で _WIN32_DCOM が定義されていないとエラーになります。
サンプルのプロジェクトを見てもらえばわかるのですが、通常は、
プロジェクト → 設定 → C/C++タブのプリプロセッサ定義の中に追加します。
    • good
    • 0
この回答へのお礼

ありがとうございます.
すごく参考になりました!
objbase.hをインクルードするだけではだめなんですね.
CoInitializeExを使用することは断念したんですけど,
同じことができるのならば
CoInitializeを突き通します!
ありがとうございました!

お礼日時:2001/12/25 02:35

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


人気Q&Aランキング