Error1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall fc_dll::fck_dll::~fck_dll(void)" (__imp_??1fck_dll@fc_dll@@QAE@XZ) referenced in function _main
Error3 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall fc_dll::fck_dll::fck_dll(void)" (__imp_??0fck_dll@fc_dll@@QAE@XZ) referenced in function _main
Error2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall fc_dll::fck_dll::rewrite(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)" (__imp_?rewrite@fck_dll@fc_dll@@QAEXPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _main
Error4 fatal error LNK1120: 3 unresolved externals C:\Users\St0p!\Documents\Visual Studio 2008\Projects\fc_test\Debug\fc_test.exe
error LNK 2019
Код:
Вот такая вот фигня.
Думал, где-то накосячил в коде - чисто.. Специально в целях самообразования написал другой код, гораздо меньше и менее практичный. Ошибки, приведённые выше - от него.. Но были такие же.
fc_dll.h
Код:
#ifndef __FC_DLL__
#define __FC_DLL__
#ifdef __DLL
#define __EXP_FC_DLL __declspec(dllexport)
#else
#define __EXP_FC_DLL __declspec(dllimport)
#endif
#include <iostream>
namespace fc_dll
{
class __EXP_FC_DLL fck_dll
{
public:
fck_dll();
~fck_dll();
void rewrite(std::string* str);
};
}//End of fc_dll namespace
#endif
#define __FC_DLL__
#ifdef __DLL
#define __EXP_FC_DLL __declspec(dllexport)
#else
#define __EXP_FC_DLL __declspec(dllimport)
#endif
#include <iostream>
namespace fc_dll
{
class __EXP_FC_DLL fck_dll
{
public:
fck_dll();
~fck_dll();
void rewrite(std::string* str);
};
}//End of fc_dll namespace
#endif
fc_dll.cpp
Код:
#define __DLL
#include "fc_dll.h"
#include <iostream>
using namespace fc_dll;
fck_dll::fck_dll()
{
}
fck_dll::~fck_dll()
{
}
void fck_dll::rewrite(std::string* str)
{
*str="yoyoyoy!!!";
}
#include "fc_dll.h"
#include <iostream>
using namespace fc_dll;
fck_dll::fck_dll()
{
}
fck_dll::~fck_dll()
{
}
void fck_dll::rewrite(std::string* str)
{
*str="yoyoyoy!!!";
}
fc_test.cpp
Код:
#include "../fc_dll/fc_dll.h"
#include <iostream>
using namespace fc_dll;
int main()
{
fck_dll fcd;
std::string str="PIACE!!!";
fcd.rewrite(&str);
std::cout<<"str is\n";//<<str;
char ch;
std::cin>>ch;
return 0;
}
#include <iostream>
using namespace fc_dll;
int main()
{
fck_dll fcd;
std::string str="PIACE!!!";
fcd.rewrite(&str);
std::cout<<"str is\n";//<<str;
char ch;
std::cin>>ch;
return 0;
}
Помогите пожалуйста разобраться.. Если кто с такой вот фигнёй сталкивался - буду очень благодарен.
Вопрос1: Насколько я помню ClassLibrary - managed-проэкт. Ваше консольное приложение тоже managed или обычное win32?
И, кстати, раз на то пошло, то что такое managed?)
Таки это.. Просто класс подругому пишется и всё. Разве нет?..
Цитата: St0p
Таки это.. Просто класс подругому пишется и всё. Разве нет?..
Нет. Managed C++, можно рассматривать как отдельный язык программирования. В .NET абсолютно другая архитектура, да собсна объяснение потянет на не одну толстенькую книженку.
Таки и как с этим бороться?..
Вариант второй изучить платформу .NET и писать под нее.
Третьего не дано.)
Эээ, виноват)) Где галочку?)))
Цитата: St0p
Эээ, виноват)) Где галочку?)))
Создаешь проект Visual С++, выбираешь Win32 Project->(название проекта)->OK->Next->Application Type: Dll->Finish.
Так он тогда скомпилится целиком как DLL, а мне надо чтобы было консольное приложение и класс выдирался из DLL, которая получается из проекта ClassLibrary.. Вот...
Цитата: St0p
Так он тогда скомпилится целиком как DLL, а мне надо чтобы было консольное приложение и класс выдирался из DLL, которая получается из проекта ClassLibrary.. Вот...
А ты уверен что тебе точно нужно ClassLibrary? Код который ты писал был Unmanaged.
Там, на самом деле, здоровенный код (около 20 классов), и ошибок, соответственно, на каждый интерфейс, конструктор и деструктор.. Хочется, чтобы оно всё поприличнее выглядело, затолкать их в отдельный project.