Это первый раз, когда я использую .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)
Если я создаю встроенные функции, эта проблема не возникает.
На форумах вы найдете ответы об ошибках с включением файлов, но я уверен, что все написано правильно.
Спасибо.
Когда вы создаете DLL, вы должны явно пометить функции и классы, которые вы хотите экспортировать, используя __declspec(dllexport)
директива и, таким образом, сделать их доступными для импорта клиентом. Когда вы импортируете класс, вы должны использовать __declspec(dllimport)
директивы.
Этот документ показывает, как помечать классы и глобальные функции в ваших заголовках, чтобы их можно было использовать для экспорта и импорта.
Других решений пока нет …