Ошибка LNK2028 и LNK2019 при использовании dll без встроенного кода

Это первый раз, когда я использую .NET, и мне трудно работать более чем с одним проектом. Что я делаю неправильно? Вот что я сделал:

1 Создайте новый проект (и решение). «Библиотека классов» называется «Lib».

2 Добавьте файл «Comp1.h» в «Header Files» со следующим кодом:

#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 Добавьте «CLR пустой проект» с именем «Test» и установите его в качестве начального проекта.

6 Добавьте файл «test.cpp» в «Исходные файлы» проекта «Test» со следующим кодом:

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

7 Добавьте «Lib» в качестве ссылки в свойствах «Test».

8 Убедитесь, что в «Зависимости проекта» «Тест» зависит от «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)

Если я создаю встроенные функции, эта проблема не возникает.

На форумах вы найдете ответы об ошибках с включением файлов, но я уверен, что все написано правильно.

Спасибо.

1

Решение

Когда вы создаете DLL, вы должны явно пометить функции и классы, которые вы хотите экспортировать, используя __declspec(dllexport) директива и, таким образом, сделать их доступными для импорта клиентом. Когда вы импортируете класс, вы должны использовать __declspec(dllimport) директивы.

Этот документ показывает, как помечать классы и глобальные функции в ваших заголовках, чтобы их можно было использовать для экспорта и импорта.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]