返回工厂函数时C ++未解析的外部符号

时间:2015-05-13 13:39:02

标签: c++ dll factory

我尝试从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;
}

0 个答案:

没有答案