レガシーデータベースとの間でデータをやりとりする優れたMFC/C++プロジェクトがあります。すべてのクラスはAFX_EXT_CLASSでエクスポートされます(誤解していない場合はdllexportです)。私は現在、C#アプリケーションで使用できるようにラッパーを作成しています。これは私の最初の本当のラッパーなので、私と一緒に抱きしめてください。ネイティブからC++ CLI未解決のシンボル
これは私がやっていることです:
- は/ Ycを/ GM-/ CLRというプロジェクトをコンパイル。 .libと.dllが生成されます。
- 私はソースにアクセスできるので、私はC++/Cliプロジェクトのヘッダファイルのパスを追加しました。したがって、タイプを認識します。
- 私は.libをC++/Cliプロジェクトのリンカ入力に追加しました。
- C++/Cliプロジェクトの.dllを参照として追加しました。
- C++/Cliプロジェクトでは、stdafx.hがネイティブプロジェクトのstdafx.hに似ています。
私はこれを正しく理解していれば、.LIBが実装され、.dllには、.NET-DLLとしてそれを参照することができるようにする「ラッパー」であり、ヘッダファイルには、クラス定義されています。
私はC++/Cliプロジェクトでネイティブオブジェクトを定義できますが、そこにある関数にアクセスしてビルドしようとすると、定義しようとしているオブジェクトに外部参照が見つかりません。
これは、ヘッダーファイルが.libの実装を指していることを知ることができないため、理解できます。ヘッダーファイルはそのまま使用されます。
私は間違っていますか?ヘッダーファイルを指すはずですか? .libファイルで実装されているクラス定義を見つけるために.dllを使用しないでください。ライブラリを指すように.defファイルを作成する必要がありますか?
がこのパズルに欠けている部分があるように思われると私は
が、これは一般的なリンケージ問題ではないことに注意してください...今どんな瞬間AHA-瞬間を体験して期待しています、それは程度、具体的ですAFX_EXT_CLASSエクスポートされたクラス、MFCおよびC++/CLIの実用的な使用。乾杯し、あなたがC/Cに移動し、プロジェクトにstdafx.h
のようなプリコンパイル済みヘッダーを使用しないでくださいする++しようとし、また、あなたのステップ4を必要としないあなたに
可能な重複使用の.libライブラリが含まれるように窓のライブラリの使用行方不明しようとすることのポイント場合、エラーメッセージのリンクをチェックし、[何未定義の参照/未解決の外部シンボルのエラーであり、私はそれをどのように修正すればよいの?] (https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) – user0042
私はそれを見て、読もうとしましたそれ。大変詳細な説明は、あまりにも細かすぎるかもしれませんが、残念ながら私は理解していない欠落した細部がまだあります。私はそれの実装のほとんどに基づいているが、私は何かを逃しているに違いない。 – Bagaboo