2009-04-22 10 views
2

私はマルチプラットフォームアプリケーションを開発しています.1つのコンポーネントにはDrawTextというクラスメソッドがあります。残念ながら、私はこのクラスのDrawTextWメソッドの未解決の外部シンボルがあることを示すリンカエラー(Windowsのみ)を取得します。DrawText関数との衝突

私はそれが代わりに私が定義されてFooText方法のFooTextWまたはFooTextA方法のいずれかを探している「テキスト」で終わる他の方法と前にこれを見てきました。私の前提は、Windowsヘッダーのどこかに、FooTextWまたはFooTextAにFooTextを割り当てる他の定義に基づくマクロ定義があるということです。

さておき(過去に私がやったことである)私の関数の名前を変更するから、誰もがこの問題を回避取得するための何か良いアイデアを持っていますか?

ありがとうございました。

ジョー

+0

これを投票してください:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6656174-have-a-version-of-windows-h-that-doesn-t-define-マ –

答えて

0

はい、これはWindowsを使用して本当の問題であり、ヘッダのすべてがこのように見えるので、それをオフにする方法はありません。

#ifdef UNICODE 
#define GetDlgItemText GetDlgItemTextW 
#else 
#define GetDlgItemText GetDlgItemTextA 
#endif 

ですから、シンボルがいずれかの方法を定義した取得するつもりです。 #include'ing windows.hの前に何かを定義してこの動作をオフにすることができればいいですが、まったく存在しません。

5

あなたは本当に唯一の二つの選択肢があります。

#ifdef DrawText 
#undef DrawText 
#endif 

またはあなたの関数の名前を変更します。 Win32は名前空間やスコープを持たないマクロを使用しているため、ちょっとしたことです。

名前を変更するだけです。

ところで:これは、通常の#ifdef UNICODEに基づいている(または_UNICODEまたは他のいくつかの変種)。