Я пытаюсь начать использовать dll для моего кода в VS 2005. Код, который я имею, очень прост, просто чтобы попробовать контрольный пример.
testdll.h:
#ifdef TEST_EXPORTS
#define TESTDLLPORT __declspec( dllexport )
#else
#define TESTDLLPORT __declspec( dllimport )
#endif
namespace TestDLLNS
{
static int s = 0;
class MyTestDll {
public:
static TESTDLLPORT int printDLLFuncs();
};
}
testdll.cpp:
// testdll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "testdll.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
namespace TestDLLNS {
int MyTestDll::printDLLFuncs() {
cout << "DLL function called" << endl;
return s;
}
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
test.cpp:
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "testdll.h"
int main(int argc, char* argv[])
{
cout << "int: " << TestDLLNS::MyTestDll::printDLLFuncs() << endl;
cout << "Called dll" << endl;
return 0;
}
Ошибка 1, ошибка LNK2019: неразрешенный внешний символ "__declspec (dllimport) public: static int _ cdecl TestDLLNS :: MyTestDll :: printDLLFuncs (void)" ( _imp_? PrintDLLFuncs @ MyTestDll @ TestDLLNS @@ SAH ) упоминается в функции _main test.obj
dumpbin \ exports testdllD.dll выдает следующее:
порядковый номер RVA name
1 0 0001105F ?printDLLFuncs@MyTestDll@TestDLLNS@@SAHXZ
Таким образом, символ явно существует в .dll. Должна ли Visual Studio также создавать файлы testdllD.lib, которые я должен связать с test.cpp? Если так, то как я получаю Visual Studio, чтобы сделать .dll и .lib.
Редактировать: я правильно делаю импорт / экспорт? Из того, что я понимаю, при компиляции dll вы захотите использовать dllexport, а при компиляции исполняемого файла, использующего dll, будет использоваться dllimport.