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

解決


しんじ  2006-03-24 01:08:59  No: 60993

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


Blue  2006-03-24 01:13:45  No: 60994

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

#define GetObject GetObjectA

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

CMyClass c;
c.GetObject();

としても、置換されて

c.GetObjectA();

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


Blue  2006-03-24 01:21:32  No: 60995

> どこかで、
> #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-24 01:34:29  No: 60996

解決方法は、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 23:44:22  No: 60997

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加