我尝试从DLL返回工厂函数。 DLL在内部使用类并公开接口(struct)。当我做同样的事情,但使用整数而不是指针,它只是工作。但是使用指针,我可以编译DLL,但链接器给我错误error LNK2001: unresolved external symbol "__declspec(dllimport) struct MyN::IClass * __cdecl MyN::getClass(void)" (__imp_?getClass@MyN@@YAPEAUIClass@1@XZ)
我使用依赖walker来检查DLL,它确实导出了有问题的函数(只是没有__imp_
)。
在评论开始之前:是的,我确实包含了.lib
文件。
我正在使用MS Visual Studio 2013 Update 4.请在下面找到情况的粗略草图:
// File DLLPublicClass.h
#pragma once
namespace MyN
{
struct IClass
{
~IClass(){}
}
}
// File DLLPrivateClass.h
#pragma once
#include "PublicClass.h"
namespace MyN
{
class Class : public IClass
{
~IClass(){}
}
}
// File DLLPublicMain.h
#pragma once
#if defined EXPORTTEST_EXPORTS
#define ETAPI __declspec(dllexport)
#else
#define ETAPI __declspec(dllimport)
#endif
#include "DLLPublicClass.h"
namespace MyN
{
ETAPI IClass *getClass();
}
// File DLLPublicMain.cpp
#include "DLLPublicMain.h"
#include "DLLPrivateClass.h"
ETAPI MyN::IClass *MyN::getClass()
{
return new MyN::Class();
}
// File EXEMain.cpp
#include "DLLPublicClass.h"
#include "DLLPublicMain.h"
int main()
{
MyN::IClass *TestC = MyN::getClass();
return 0;
}