1

私はビルドとインストールの作成と管理を担当しており、C++ 開発者ではないので、以下のエラーのほとんどは私には理解できません。

そうは言っても、開発者 (現在はいない) が Debug|Win32 (VS08 を使用) で正常にコンパイルされるコードをチェックインしましたが、Unicode Release MinDependency|Win32 でコンパイルする必要があります。

88 個のエラーがありますが、すべて「変換」の問題に帰着するようであり、すべて以下にリストされている問題が複数回発生しているだけです。

  • コンパイル エラーは、コーディング方法 (C++、ATL) の基本的なものですか?

  • これをMinDepとしてコンパイルするために変更できるコンパイルオプションスイッチまたはVS設定はありますか?

  • 目前の問題を理解できるように、これを引き起こしている原因についての簡単な説明はありますか?

エラー:

cannot convert from 'unsigned short *' to 'ATL::CComBSTR'
cannot convert from 'wchar_t *' to 'unsigned short *'
cannot convert parameter 1 from 'unsigned short *' to 'wchar_t *'
cannot convert parameter 1 from 'LPWSTR' to 'const unsigned short *'
cannot convert parameter 2 from 'BSTR' to 'const unsigned short *'
cannot convert parameter 2 from 'LPWSTR' to 'const unsigned short *'
none of the 2 overloads could convert all the argument types
cannot convert parameter 1 from 'unsigned short *' to 'const OLECHAR *'
cannot convert parameter 1 from 'unsigned short [4096]' to 'wchar_t *'
4

3 に答える 3

4

問題は、コードがひどく書かれていたことです。開発者は、Unicodeでコンパイルするときに保持されない文字と整数型について仮定しました。問題は、Visual C ++、ATL、またはVisualStudioにはありません。

明らかに、コンパイルに使用できるコンパイラスイッチがあります。これは、おそらくDebugバージョンとUnicodeReleaseMindependencyバージョンの主な違いだからです。ただし、実際のUnicode Release Mindependencyビルドを実行しなくなったことを意味するため、切り替えたくありません。

unsigned short *すべての変換メッセージが(特定の整数型へのポインター)と文字列の表現の間にあることに気付くでしょう。適切に記述されたC++では、あらゆる場所で整数型と文字型の間で変換を行うことはありません。たとえばレガシーコードを扱う場合などにそうする必要があるかもしれませんが、それは潜在的な問題の原因であり、注意深く監視する必要があります。

このコードを書き直す必要があります。あなたは開発者がいないと言ったので(多分、このようなことをするために解雇されたのでしょうか?)、別の開発者にそれを修正してもらう必要があります。

于 2009-07-31T18:13:00.923 に答える
1

Visual Studio IDE(2008年を想定)には、デバッグビルドとリリースビルドの両方で同じ設定になっていることを確認できる場所がいくつかあります。

プロジェクトのプロパティ->一般->文字セット(Unicode文字セットを使用するように設定)

プロジェクトのプロパティ->C/ C++->言語->wchar_tを組み込み型として扱います(通常はYesに設定されます)

プロジェクトのプロパティ->C/C++->コマンドライン-UNICODEと_UNICODEの両方が定義されていることがわかります

これらの設定が両方のビルドで同じである場合、条件付きコンパイルが原因で発生する可能性があるため、少し悪化する可能性があります。そこでは、使用している特定のライブラリまたはコードによって異なります。

MinDependencyの意味については、 http://msdn.microsoft.com/en-us/library/xt153e2k(VS.71).aspxを参照してください。これは実際には、crtに対してリンクする方法に関するATLの定義です。

wchar_tはunsignedshortとして定義されていることに注意してください。そのため、定義が欠落しているだけであり、上記のような実際の変換のバグではありません。テストするVC6はありませんが、VC9では次のようになります。

#ifndef _WCHAR_T_DEFINED
typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED
#endif
于 2009-07-31T18:12:44.077 に答える
-1

エラーはすべて文字列に関連しているように見えます。誰かがリリース モードのデバッグ モードで Unicode および/またはワイド文字列を有効/無効にした可能性があります。Visual Studio のリリース モードの設定でこれらの設定を反転してみて、コンパイルされるかどうかを確認してください。または、リリース モードとデバッグ モードの間ですべての設定が一致していることを確認します。

于 2009-07-31T18:01:59.933 に答える