現在DirectX9関連のスタティックライブラリを作っています。
自作クラス(例えばCMyClassとします)にGetObjectメンバ関数を作り、自作のDOSプログラムでそのGetObjectメンバ関数を呼び出しています。
しかし、自作クラスのヘッダファイルにd3d9.hをインクルードすると"GetObjectAはCMyClassのメンバではありません"というメッセージが出てコンパイルすることができません。
どうすればGetObject関数を使えるようになるのでしょうか?どなたかご教授願います。
GetObjectっていうメソッド名がまずいようです。
どこかで、
#define GetObject GetObjectA
というのがあるため、コンパイル時に
CMyClass c;
c.GetObject();
としても、置換されて
c.GetObjectA();
となってしまうからです。
> GetObjectAは
> どこかで、
> #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
解決方法は、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
有難うございました。おかげさまで解決することができました。
ツイート | ![]() |