自作クラスのGetObjectメンバ関数を使うには?

解決


しんじ  2006-03-23 16:08:59  No: 60993  IP: 192.*.*.*

現在DirectX9関連のスタティックライブラリを作っています。
自作クラス(例えばCMyClassとします)にGetObjectメンバ関数を作り、自作のDOSプログラムでそのGetObjectメンバ関数を呼び出しています。
しかし、自作クラスのヘッダファイルにd3d9.hをインクルードすると"GetObjectAはCMyClassのメンバではありません"というメッセージが出てコンパイルすることができません。
どうすればGetObject関数を使えるようになるのでしょうか?どなたかご教授願います。

編集 削除
Blue  2006-03-23 16:13:45  No: 60994  IP: 192.*.*.*

GetObjectっていうメソッド名がまずいようです。
どこかで、

#define GetObject GetObjectA

というのがあるため、コンパイル時に

CMyClass c;
c.GetObject();

としても、置換されて

c.GetObjectA();

となってしまうからです。
> GetObjectAは

編集 削除
Blue  2006-03-23 16:21:32  No: 60995  IP: 192.*.*.*

> どこかで、
> #define GetObject GetObjectA
> というのがあるため
って、普通に GDI系の APIであるやんけ。

wingdi.h
WINGDIAPI int   WINAPI GetObjectA(HGDIOBJ, int, LPVOID);
WINGDIAPI int   WINAPI GetObjectW(HGDIOBJ, int, LPVOID);
#ifdef UNICODE
#define GetObject  GetObjectW
#else
#define GetObject  GetObjectA
#endif // !UNICODE

編集 削除
Blue  2006-03-23 16:34:29  No: 60996  IP: 192.*.*.*

解決方法は、wingdiをインクルードしてからクラスを定義すれば、
定義自体も GetObjectA か GetObjectW に置換されるので見た目上OKそうです。

実験ソース1)
class CMyClass
{
public:
    void GetObject(){}
};

#include <windows.h>

int main()
{
    CMyClass c;
    c.GetObject();
    return 0;
}

error C2039: 'GetObjectA' : 'CMyClass' のメンバではありません。
エラー 1、警告 0

実験ソース2)
#include <windows.h>

class CMyClass
{
public:
    void GetObject(){}
};

int main()
{
    CMyClass c;
    c.GetObject();
    return 0;
}

tests.exe - エラー 0、警告 0

編集 削除
しんじ  2006-03-27 14:44:22  No: 60997  IP: 192.*.*.*

有難うございました。おかげさまで解決することができました。

編集 削除