2

C ++(MFC)に2つのプロジェクトがあります。1つはライブラリプロジェクトで、2つ目(実行可能ファイル)で使用しています。

CStringを引数として取る通常のプロジェクトから関数を呼び出すまで、これらはうまく連携します。このようなリンカーエラーが発生します

error LNK2019: unresolved external symbol "public: void __thiscall 
CTextDisplay::SetText1(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,
class ATL::ChTraitsCRT<wchar_t> > >)" (?SetText1@CTextDisplay@@QAEXV?$CStringT@_WV?
$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) referenced in function 
"public: void __thiscall CManualPane::SetBeadCountFor(int,double)" 
(?SetBeadCountFor@CManualPane@@QAEXHN@Z)    C:\source\IQ-Project\IQ\ManualPane.obj  IQ

実行可能プロジェクトの文字セットはUNICODEですが、ライブラリの文字セットはMulty-Bytechatactersetに設定されています。とんでもない量のエラーが発生しない限り、実際に変更することはできません。

助言がありますか?

編集:これら2つのプロジェクトで異なる設定がある理由は、実行可能プロジェクトが基本的に私のグループが構築または作成しなかった外部プロジェクトであるためです。持ってきて使うだけでした。図書館プロジェクトは、私たち全員が数年間取り組んできたものです。

4

2 に答える 2

3

ライブラリプロジェクトのヘッダーを実行可能ファイルに含めると、関数の宣言で使用されるtypedefが存在する可能性があります。実行可能ファイルはUNICODEを使用するため、宣言はUNICODEになります。ただし、ライブラリの実装はまだMultiByteであるため、定義が宣言と一致しないため、リンカエラーが発生します。

これらのtypedefがどのように設定されているかを調べてください。含まれているヘッダーの周りで、特別な#define、#undefを実行できる可能性があります。

于 2013-02-18T17:45:40.930 に答える
1

結局、同じソリューションにユニコードとマルチバイトのプロジェクトを含めることを避ける方が良いアイデアであることがわかったので、すべてをユニコードに移動してそこから移動しました

于 2014-11-04T16:48:27.630 に答える