これはおそらく、私がC++/CLIの知識が不足しているために起こりますが、どこからでもこの質問を見つけることはできません。管理されたプロジェクトにネイティブクラスを追加する
私は、/ CLRでコンパイルされ、RefClass.cppという名前の(C++/cli)refクラスと、CppClass.cppというネイティブのC++クラスを持つManagedProjectというプロジェクトを持っています。
RefClassからCppClassのコンストラクタを呼び出すことができます。
しかし、別のプロジェクト "OtherProject"からCppClassを呼び出すことはできません。これは/ clrでもコンパイルされています。 OtherProjectにはOther.cppしかありません。 OtherProjectはManagedProjectへの参照を持っているので、RefClassを呼び出すことができますが、CppClassのコンストラクターを呼び出そうとすると、#include "CppClass.h"でもLNK2019とLNK2028エラーが発生します。
非/ clrネイティブクラスから呼び出すときに同じエラーが発生します。ここ
はコードサンプルである:
ManagedProject
RefClass.cpp:
// has a .h file with the constructor declaration & instance variable int test;
#include "CppClass.cpp"
RefClass:RefClass(int test){
this->test = test;
CppClass inst(42); //This works
}
CppClass.cpp:
// has a .h file with the constructor declaration & instance variable int test2;
CppClass:CppClass(int test2){
this->test2 = test2;
}
OtherProject
Other.cpp:
#include "CppClass.cpp"
int wmain(/*args*/){
RefClass^ refinst = gcnew RefClass(64); //This works
CppClass inst(42); //This fails, I get LNK2019 & LNK2028 at Other.obj
}
実際のエラー出力: 注:ここSQLPrecheckReportはCppClassで、appzsqlmigrate.cppはOther.cppで、appzsqlmigrateはの名前ですその他のプロジェクト。
32> appzsqlmigrate.obj:エラーLNK2028:未解決のトークン(0A000B59) "公共:__cdecl SQLPrecheckReport :: SQLPrecheckReport(INT)" で参照 (?? 0SQLPrecheckReport @@ $$ FQEAA @ H @ Z)機能 "INT __cdecl wmain(int型、wchar_t型* * CONST)"(wmain @@ $$ HYAHHQEAPEA_W @ Z?)
32> appzsqlmigrate.obj:エラーLNK2028:未解決のトークン(0A000B5A) 「公共:__cdecl SQLPrecheckReport "int __cdecl wmain(int、wchar_t * * const)"(?wmain @@ $$ HYAHHQEAP)関数で参照されている:(?? 1SQLPrecheckReport @@ $$ FQEAA @ XZ) EA_Wする@ Z)
32> appzsqlmigrate.obj:エラーLNK2019:未解決の外部シンボル "パブリック:__cdecl SQLPrecheckReport :: SQLPrecheckReport(INT)" (?? 0SQLPrecheckReport @@ $$ FQEAA @ H @ Z)で参照機能 "INT __cdecl wmain(int型、wchar_t型* * CONST)"(wmain @@ $$ HYAHHQEAPEA_W @ Z?)
32> appzsqlmigrate.obj:エラーLNK2019:未解決の外部シンボル 「公共:__cdecl SQLPrecheckReport :: 〜SQLPrecheckReport(void) " (??1SQLPrecheckReport @@ $$ FQEAA @ XZ)関数で参照 "のint __cdecl wmain(int型、wchar_t型* * CONST)"(?wmain @@ $$ HYAHHQEAPEA_W @ Z)
CLRはモジュールに対する優れたサポートを提供しますが、そのサポートをアンマネージドコードにも遡及的に追加しません。通常のC++ダンスをここで行い、プレーンな静的ライブラリまたはDLLプロジェクトにC++クラスを置き、.libsをリンクしてネイティブコードを共有できるようにする必要があります。 –
@ HansPassant、私は今問題がC++/cliと関係がないことを知りました。申し訳ありませんが、これは明らかなようですが、私は完全にDLLとライブラリを使用しています。 C++クラスをプレーンな静的ライブラリやDLLプロジェクトに置き、.libsをリンクしてネイティブコードを共有できるようにする方法を教えてください。私がこれまでに試したことは、エラーを解決しなかった... –