我正在尝试使用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 @@ SAHXZ)在函数_main test.obj
中引用dumpbin \ exports testdllD.dll给出以下内容: 序数提示RVA名称
1 0 0001105F ?printDLLFuncs@MyTestDll@TestDLLNS@@SAHXZ
因此符号显然存在于.dll中。 Visual Studio是否也应该创建一个testdllD.lib文件,我应该与test.cpp链接?如果是这样,我如何让visual studio同时制作.dll和.lib。
编辑:我正在进行正确的导入/导出吗?根据我的理解,当编译使用dll的可执行文件时,你想要使用dllexport编译dll,将使用dllimport。
答案 0 :(得分:0)
有几点需要注意,我希望你不要错过它们。