web-dev-qa-db-ja.com

エラーC2733オーバーロードされた関数の2番目のCリンケージ '関数'は許可されていません

Visual Studio 2010Proで古いcppMFCプロジェクトをコンパイルしようとしています。

Labviewを使用してコンパイルされたdllを使用していますが、エラーメッセージの原因がわからないため、この情報を追加しています。

エラーメッセージは、すべて同じエラータイプの複数の機能に表示されます。

error C2733: second C linkage of overloaded function 'function name' not allowed.

「関数名」には、「StrCatW」、「StrCmpNW」、「StrCmpW」、「StrCpyNW」、および「StrCpyW」が含まれます。

私はウェブ上で 同様のケース を見つけました。

リンクの提案は私の場合は解決しませんでしたが、それでも同じエラーメッセージが表示されます。

助けようとしている人に事前に感謝します。

15
swcraft

私はMFCの経験がありませんが、とにかく答えようとします。このようなエラーメッセージは、extern "C"関数が異なるパラメータセットで宣言されている場合に表示されます。例えば:

extern "C" int myfunc(int);
extern "C" int myfunc(char);

あなたの場合、2つの宣言はおそらくchar*に関連しています。

extern "C" char* StrCatW(char*, char*);
extern "C" wchar_t* StrCatW(wchar_t*, wchar_t*);

ソリューションでUnicodeサポートをオフにしてみてください。dllが本当に古い場合は、StrCatWchar*引数で宣言し、他の宣言と競合していると思います。

それでも問題が解決しない場合は、前処理された出力をオンにします(/Eコンパイラスイッチ、私が覚えている限り)-非常に大きなファイルが出力されるので、その中でStrCatWを探してください。何が起こっているかについての手がかりを与えてください。

16
anatolyg