Metasequoia BBS

| New message | Normal | Tree |
Status
Tag
Keyword
[7044] GetObject / tamachan
Done [Question] Response
mqsdk259 MQPlugin.h@34行

#ifdef _WIN32
#ifdef GetObject
#undef GetObject
#endif
#endif

のためにWinapiの::GetObjectが呼べません。とりあえずコメントアウトしたのですが何のために書いてあるのか分からないのでモヤモヤします。これはコメントアウトしても良いものなんでしょうか?
2017-05-30 22:09
[7045] Re: GetObject / Administrator
windows.hをインクルードするとWindows APIのGetObject()はANSI/Unicode版のGetObjectA/GetObjectWに再定義されますが、この影響でMQDocument::GetObject()まで名前が変更されてしまいIntellisense使用時にマッピングされた関数名になってしまうので、あえてundefしております。

必要であればコメントアウトしても構いませんが、SDKの更新のたびに変更が必要になるので、それよりもWindows APIのほうをANSI/Unicode版のGetObjectA/GetObjectW()を直接呼び出すほうが手間もかからないと思います。

なお、GUIの描画にはWindows APIではなくMQWidgetベースのクラスの利用を推奨しております。こちらを利用すれば本体との外観の統一、High-DPIやマルチプラットフォームへの対応も容易になるメリットもあります。標準添付のプラグインではGetObjectはまったく使用していません。
2017-05-31 10:17
[7046] Re: GetObject / tamachan
詳細な説明ありがとうございました。

GDIはMQWidgetを使っています。クリップボードへアクセスするのにGetObjectを使っています。
atlgdi.h(CDCなどのラッパー使っている)で大量のエラーが出るのでとりあえずコメントアウトでいきたいと思います。
2017-05-31 20:12
[7047] Re: GetObject / tamachan
https://joinup.ec.europa.eu/svn/gvsig-desktop/branches/v10/install/launcher/izpack-launcher-1.3_linux/src/wx/include/wx/msw/winundef.h
こういった解決策を見つけました。GetObjectだけでいいのでMQPlugin.hに追加してもらえないでしょうか?
2017-05-31 20:47
[7048] Re: GetObject / Administrator
>こういった解決策を見つけました。GetObjectだけでいいのでMQPlugin.hに追加してもらえないでしょうか?

こういったコードをSDKに含めるべきかどうかは難しいですが、それよりこちらをご自身のコード内からwindows.hの後ろに追加でincludeすれば簡単に解決するのではないでしょうか。
2017-06-01 09:52
[7049] Re: GetObject / tamachan
お言葉を返すようで気が引けるのですが・・・MQPlugin.hが#undef GetObjectしているのですからMQPlugin.h内で対策するのが普通かと思います。
ライセンス的なことでしたら、上のテクニックはそもそもSDKのwingdi.hでも似たようなことが書いてあり、誰が書いても同じようなものになる一般的なものので、コピペするようなことがなければ問題ないかと思います
2017-06-01 21:26