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

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と関連する良く見られている質問

QSendMessage(hW,WM_CREATE,0,0);を

SendMessage(hW,WM_CREATE,0,0);
を実行するとシステムがWM_DOWNやWM_CHARを発行しなくなるみたいです
というのはそれ以降キー入力を無視するようになるのです
いったんアプリをアイコン化してウィンドウ化するとWM_DOWNやWM_CHARを発行するようになります
WM_CREATEを送ってもWM_DOWNやWM_CHARを発行しなくなるのを阻止するために何か方法はないでしょうか?

Aベストアンサー

>プログラムのイニシャライズのために送ったのですが送らないで住むプログラムに変更しました

普通はそんな方法はとりません。
システムが何をするか分からないからです。

自分でメッセージを定義して、初期化処理を行うようするためのメッセージを送るほうが無難です。
WM_CREATEと同じ処理を初期化処理として行わせたいのであれば、初期化処理を関数化して自分で定義したメッセージでも呼び出せばいいのですし。


>作ったプッシュボタンを押してシステムがWM_COMMANDを送ってきた後キー関係のメッセージを送ってくれなくなります

プッシュボタンがキーボードフォーカスを持ってのるでは?

ボタンがキーボードフォーカスを持っていてもキー関連のメッセージを親ウィンドウが受け取りたいのであれば、サブクラス化をするしかないでしょう。

Qint select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)について

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識だとreadfds,writefdsが引数として与えられているとしても、
どちらかのfd_setのうち、一つでも動きがあればselect文は
抜けてしまうことになります。とすると、戻り値として
「readfds, writefds, exceptfds 中の 1 になっているビットの総数」
は常に1ということになってしまいます。しかし、総数というからには
複数同時に1になることもあるはずです。

私の認識が間違っているとは思うのですが、どう間違っているのかわかりません。
select文の動きについて詳しく教えていただけないでしょうか。
または良いページがあれば教えてください。

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きが...続きを読む

Aベストアンサー

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビットが一度にONになっているはずです。
一方、相手が、一切電文を送ってない状態で、selectを呼び出した場合は、何れかのビットがONになればリターンするので、そのときは、貴方が想像しているように
ビットの総数は1になる可能性が高いです。
従って、相手が電文を送る前にselectを呼び出すか、送った後にselectを呼び出すかは、その時のタイミングにより異なります。従って、ビット数の総和が常に1であるとは、考えない方が無難です。(1つのソケットしか使用しない場合は別ですが・・・)

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビ...続きを読む

Qこの”void(*m_pViewMode)(BYTE,BYTE,WORD);”このソースコードの意味は?

今、みているソースコードで次のようなコードがありました。


void(*m_pViewMode)(BYTE,BYTE,WORD);

--------(中略)----------------------------

m_pViewMode(err == 0 ? stKey.key : 0x00,clear,stKey.time);


全く何をどうやっているのかよくわからないのですが、これはC言語ではどのようなことをやっているソースコードなのでしょうか?

ご存じの方いらっしゃいましたらご教授お願いいたします。

Aベストアンサー

> void (*m_pViewMode)(BYTE,BYTE,WORD);
これは「関数へのポインタ」型の変数を宣言している。
m_pViewModeはBYTEとBYTEとWORDを引数に取り、返り値のない関数を保持するポインタ変数になる。

> m_pViewMode(err == 0 ? stKey.key : 0x00,clear,stKey.time);
ここでは、m_pViewModeに代入された関数を実行している。
「err == 0 ? stKey.key : 0x00」の部分が最初の引数で、三項演算子?:を用いてerrが0のときはstKey.keyを、それ以外では0x00を最初の引数にする。

Q1,1,2,3,5,8,13の合計

初心者ですみませんが、1,1,2,3,5,8,13の合計を出すプログラミングがどうしてもわかりません。どなたかご教示頂けましたら助かります。
宜しくお願いいたします。

Aベストアンサー

#include <stdio.h>

int main(void)
{
   printf("%d\n", 1+1+2+3+5+8+13);
}

Q自分のIID_IUnKnown取得について

実際自分でも言ってることが正しいものなのか疑問なのですが、よろしくお願いします。

ActiveX+SDKを用いて、HTTPS接続を行いファイルをダウンロードプログラムを組んでいるのですが、
先輩が言うには

呼び出す自身のIID_IUnKnownを取得の仕方を調べることで問題が解決するそうなのですが、いまいちというか、まったく分からない状態です(泣

現在のソースの一部を乗せておきます。
といっても現在ソースが手元にないので記憶からほりおこしてます・・・
QueryInterface(IID_IUnKnown ,※ )

※この部分わすれました

実際、自分でもこんな説明であっているのかなどもわかりません、足りない情報があるなら補足いたします。ちなみにC言語をまだ1ヶ月ほどのレベルです。

どうか、よろしくお願いいたします。

Aベストアンサー

自信はないですが。。。

>result = URLDownloadToFile( punk, szURL, szFileName, 0, NULL);//<-第一引数で取得したポインタをセットしたい

URLDownloadToFileの第5引数をNULL(進行状況を取得しない)にするのでしたら、第1引数もNULLのままで大丈夫だと思います。試してみてはどうでしょうか?


人気Q&Aランキング

おすすめ情報