マネージ C++ は初めてです。
1 つの .sln に、Project Lib と Project LibTest という 2 つのマネージ C++ プロジェクトがあります。LibTest は Lib を利用します。
Lib は正常にコンパイルおよびリンクされます。プロジェクトは .dll として設定されます。
LibTest も .dll としてコンパイルされますが、リンクすると、すべての Lib::methods で「未解決のトークン」が発生します。これらのメソッド定義は、Lib .cpp ファイルで定義されています。
定義を Lib.h ファイルに移動すると、すべてが機能します。
LibTest の Reference を Lib プロジェクトに依存するように変更しました。
私は何が欠けていますか?
編集:さて、これは私が持っているものとまったく同じですが、まだ機能しません。
まず、Visual Studio 2008 SP1 を使用しています。
次に、C# で同様の演習を行ったところ、問題なく動作しました。
空の C++ CLR プロジェクトを作成しました。Lib プロジェクトを追加しました。マネージド クラスを追加しました。VSTD によって生成された Lib.h と Lib.cpp。コンストラクタは自動生成されます。
次に、ソリューションに別のプロジェクトを追加しました。私はこれを LibTest と呼びました。LibTest という別のマネージ クラスを追加しました。LibTest.h と LibTest.cpp が生成されます。LibTest コンストラクターで Lib をインスタンス化しようとしましたが、リンク中に単純に次のように述べました。
1>LibTest.obj: エラー LNK2020: 未解決のトークン (06000002) Lib::.ctor
正確なコードは次のとおりです。
Lib プロジェクト (.dll プロジェクトとしてコンパイル)
//Lib.h
#pragma once
ref class Lib
{
public:
Lib(void);
};
//Lib.cpp
#include "Lib.h"
Lib::Lib(void)
{
}
LibTest プロジェクト (application.exe としてコンパイル)
// LibTest.h
#pragma once
ref class LibTest
{
public:
LibTest(void);
};
// LibTest.cpp
#include "LibTest.h"
#include "Lib.h"
LibTest::LibTest(void)
{
Lib^ lib = gcnew Lib;
}
int main()
{
return 0;
}