1

IDirectDraw7 :: SetCooperativeLevelメソッドのドキュメントに記載されているように、

LoadLibraryを使用してDdraw.dllに明示的にリンクしてから、GetProcAddressを使用してSetCooperativeLevelメソッドにアクセスする必要があります。

発言で。ただし、これを実行しようとすると(以下のコード)、機能しません。私は何か間違ったことをしていますか?

typedef HRESULT (*pSetCooperativeLevelFunc)(HWND, DWORD);
HMODULE ddrawLib = LoadLibrary(L"ddraw.dll");
pSetCooperativeLevelFunc SCL = (pSetCooperativeLevelFunc) GetProcAddress(
                                 ddrawLib,
                                 "SetCooperativeLevel"
                                 );

if (SCL == NULL) {
    // this happens
    int error = GetLastError(); // 127 (ERROR_PROC_NOT_FOUND)
    printf("Error getting SetCooperativeLevel function address: %i", error);
}
4

3 に答える 3

1

これはドキュメントのバグだと思います。DirectDraw7を使用してから長い時間が経ちましたが、動的にロードする必要があったことを覚えていません。これはIDirectDraw7インターフェイスの単なるメソッドであり、他のメソッドと同じように呼び出されました。

于 2012-03-29T23:49:14.477 に答える
1

SetCooperativeLevelddraw.dllにはエクスポートされた関数はありません。DUMPBINユーティリティを使用して、自分で確認してください。DirectDrawCreateを使用して/DirectDrawCreateExおよび同様の関数を取得できGetProcAddressますが、COMオブジェクトの個々のメソッドを抽出することはできません。

記事は非常にばかげており、意味がありません。おそらくDirectDrawCreate、ddraw.dllなどから取得するように指示されているはずですが、そうする理由はほとんどありません。

IDirectDraw7インターフェイスによって提供されるメソッドとのリンクddraw.lib、呼び出し、およびアクセスメソッド。DirectDrawCreate

PSダンプビンに慣れていない場合は、少なくともこのユーティリティの基本的な使用法を学ぶことをお勧めします。

于 2012-03-29T23:50:31.440 に答える
0

DX9以降、ddraw.libはSDKから完全に削除されたため、LoadLibrary / GetProcAddressを呼び出して、DirectDrawCreateまたはDirectDrawEnumerateを呼び出す必要があります。残念ながら、MSDNはそれを間違え、COMインターフェイスのメソッドも含めてすべてのDirectDraw関数にGetProcAddressコメントを追加しました。

于 2015-03-15T13:36:58.980 に答える