1

.NET を使用するのはこれが初めてで、複数のプロジェクトを使用すると苦労します。私は何を間違っていますか?これは私がしたことです:

1 新しいプロジェクト (およびソリューション) を作成します。「Lib」と呼ばれる「クラス ライブラリ」。

2 次のコードを使用して、ファイル「Comp1.h」を「ヘッダー ファイル」に追加します。

#ifndef COMP1_H
#define COMP1_H
class comp1
{
public:
    comp1(void);
    ~comp1(void);
}
#endif

3 次のコードを使用して、ファイル「Comp1.cpp」を「ソース ファイル」に追加します。

#include "stdafx.h"
#include "Comp1.h"
comp1::comp1(void){}
comp1::~comp1(void){}

4 自動的に作成された「Lib.h」ファイルのコードを次のように上書きします。

#ifndef LIB_H
#define LIB_H
#include "Comp1.h"
#endif

5 「Test」という名前の「CLR 空のプロジェクト」を追加し、スタートアップ プロジェクトとして設定します。

6 次のコードを使用して、ファイル「test.cpp」を「テスト」プロジェクトの「ソース ファイル」に追加します。

#include "../Lib/Lib.h"
#using "../Debug/Lib.dll"//Is this line mandatory?
int main()
{
comp1 component;
return 0;
}

7 「Test」プロパティに参照として「Lib」を追加します。

8 「Project Dependencies」で、「Test」が「Lib」に依存していることを確認します。

9 両方を /clr としてコンパイルします。

これは私が得るものです:

1>test.obj : error LNK2028: unresolved token (0A000009) "public: __thiscall comp1::comp1(void)" (??0comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>test.obj : error LNK2028: unresolved token (0A00000A) "public: __thiscall comp1::~comp1(void)" (??1comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>test.obj : error LNK2019: unresolved external symbol "public: __thiscall comp1::~comp1(void)" (??1comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>test.obj : error LNK2019: unresolved external symbol "public: __thiscall comp1::comp1(void)" (??0comp1@@$$FQAE@XZ) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)

インライン関数を作成すると、この問題は発生しません。

フォーラムでは、ファイルをインクルードする際の間違いについての回答を見つけることができますが、私はすべてを正しくコーディングしたと確信しています。

ありがとうございました。

4

1 に答える 1

1

DLL を作成するときは、ディレクティブを使用してエクスポートする関数とクラスを明示的にマーク__declspec(dllexport)し、クライアントがインポートできるようにする必要があります。クラスをインポートするときは、__declspec(dllimport)ディレクティブを使用する必要があります。

このドキュメントでは、ヘッダーでクラスとグローバル関数をマークして、エクスポートとインポートに使用できるようにする方法を示します。

于 2013-01-08T13:55:52.897 に答える