6

マネージ 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;
}
4

4 に答える 4

1

マネージド拡張機能を使用している場合は、参照を正しく設定するだけで十分です。

標準の C++ 関数を使用している場合は、おそらく と を使用して関数を定義する必要があり__declspec(dllexport)ます__declspec(dllimport)詳細については、MSDN を参照してください

__declspec(dllexport)エクスポート ライブラリに特定の関数を追加__declspec(dllimport)し、DLL からこれらのシンボルをインポートする必要があることをインポート ライブラリ (LibTest) に伝えます。

于 2009-06-01T19:50:05.390 に答える
0

これが Bojan によって提案された最終的な変更です。ありがとうボージャン!

注: 「LibTest」参照に「Lib」を追加することを忘れないでください。

Lib プロジェクト (.dll プロジェクトとしてコンパイル)

//Lib.h

#pragma once

public 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"

LibTest::LibTest(void)
{
  Lib^ lib = gcnew Lib;
}

int main()
{
  return 0;
}
于 2009-06-02T20:28:28.763 に答える