2

Unicode で構築された MFC アプリケーションから非 Unicode ライブラリを使用したいと考えています。ただし、意図しないメモリ割り当て、非 Unicode ライブラリ内での文字列処理などのイベントが発生する可能性があるかどうかはわかりません。

影響を説明するか、リソース ページを提供してください。

4

1 に答える 1

2

アプリケーションが Unicode であるかどうかは、実行時ではなくコンパイル時の違いです。Unicode 実行可能ファイルが ANSI DLL を読み込めない固有の理由はありません。アプリケーションと DLL の両方が MFC を使用している場合、それらは異なる MFC ランタイムにリンクされ、問題が発生する可能性がありますが、そうではないため問題ありません。

注意が必要なのは、DLL とアプリケーションの間で転送される文字列データが一貫して解釈されるようにすることです。ほとんどの場合、これは必要に応じて ANSI と Unicode の間で変換することを意味するだけであり、Windows はこれを簡単に実行できる API 関数を提供します。

ただし、Unicode 用にコンパイルする場合と ANSI 用にコンパイルする場合では異なる方法で解釈されるデータ型がないかどうか、ヘッダー ファイルを確認する必要があります。たとえば、DLL 関数の 1 つが次のように宣言されているとします。

DWORD process_string(TCHAR * string)

非 Unicode ライブラリは TCHAR を char として解釈しますが、アプリケーションはそれを wchar_t として解釈し、関数を呼び出す前に文字列を ANSI に変換する必要があるという事実を隠します。

于 2012-04-23T07:04:59.800 に答える