2

アンマネージ C++ 実行可能プロジェクトと別のマネージ プロジェクトを橋渡しする CLI DLL を作成して、1 つの Visual Studio ソリューションにまとめようとしています。

ただし、私が抱えている問題は以前のものです。新しい CLI プロジェクトでアンマネージ C++ プロジェクトをリンク参照できません。必要な .h ファイルを含め、アンマネージド プロジェクトへの参照を CLI プロジェクトに追加しました。コンパイルは成功しましたが、以前に見たことのないリンケージ エラーが発生しています。

エラー 2
エラー LNK2028: 未解決のトークン (0A000088) "public: __cdecl ...

プロジェクトのプロパティに参照を追加し、.h ファイルを含めました。

ありがとう

4

1 に答える 1

2

リンカーには、他のプロジェクトに関する中間情報が欠落しているようです。「参照」ネイティブプロジェクトがリンクフェーズを自動的に設定するかどうかは本当に覚えていません..実際、あなたが「参照」と言うのは奇妙だと思います..私にとって「参照」という言葉は.Netの世界に少し限定されていますVS の「参照の追加」のため、誰もインクルード/ライブラリを気にせず、明らかな理由でネイティブ dll に対してどの IIRC を使用できないかが原因です。リンカー オプションを手動で設定したという意味でしたら、ご容赦ください :)

そうでない場合は、ネイティブ モジュールをどのように参照したかを説明してください。

いずれにせよ、「参照」が以前に機能していた場合、プロジェクトの名前を変更した場合、ファイルのタイムスタンプが少しずれていて、VS が新しいバージョンに気付かなかった場合などに、ファイル名が同期しなくなる可能性があります。そうでない場合は、Debug/Release/Bin/Obj フォルダーを手動で削除して、再構築を再試行できます。

診断を試みるための最初のステップは、リンカが入力として与えられているものを確認することです。C++/CLI プロジェクトのプロジェクト プロパティ ページで、[リンカ] -> [コマンドライン] をチェックし、「myOtherNativeCppProjectName.lib」のような名前のファイルがあるかどうかを確認します。そこに見える。そうでない場合-ここに問題があります。以前のリンカーページのリンカーオプションに追加するか、参照の追加をやり直してから、クリーンアップして再構築し、何が起こるかを確認してください。

さらに言うと、エラーメッセージ全体を投稿する必要があります-これは関数名で切り捨てられているため、それが関数なのか、ライブラリが見つからないモジュールなのかを判断するのは困難です。コンパイル フェーズが成功し、問題がリンクにあるため、その関数が実装されていることを 100% 確信していますか? つまり、C++/CLI プロジェクトには正しい .h が提供されたはずですが、ネイティブに含まれる .h ファイルと一致する正しい .cpp ファイルはありましたか? 1 つのファイルを追加するのを忘れるのもよくあることです。または、テンプレートをインスタンス化するのを忘れる..または、.H と .CPP. の間でクラス/関数名を間違って入力する..

于 2012-09-19T07:51:28.170 に答える