相关疑难解决方法(0)

导出DLL中的静态数据

我有一个DLL,其中包含一个静态成员的类.我用__declspec(dllexport)它来使用这个类的方法.但是当我将它链接到另一个项目并尝试编译它时,我得到静态数据的"未解析的外部符号"错误.

例如,在DLL中,Test.h

class __declspec(dllexport) Test{
protected:
    static int d;
public:
    static void m(){int x = a;}
}
Run Code Online (Sandbox Code Playgroud)

在DLL中,Test.cpp

#include "Test.h"

int Test::d;
Run Code Online (Sandbox Code Playgroud)

在使用Test的应用程序中,我调用m().

我也尝试分别为每个方法使用__declspec(dllexport),但我仍然得到静态成员的相同链接错误.

如果我使用dumpbin检查DLL(.lib),我可以看到符号已导出.

例如,应用程序在链接时给出以下错误:

1>Main.obj : error LNK2001: unresolved external symbol "protected: static int CalcEngine::i_MatrixRow" (?i_MatrixRow@CalcEngine@@1HA)
Run Code Online (Sandbox Code Playgroud)

但是.lib的dumpbin包含:

Version      : 0
  Machine      : 14C (x86)
  TimeDateStamp: 4BA3611A Fri Mar 19 17:03:46 2010
  SizeOfData   : 0000002C
  DLL name     : CalcEngine.dll
  Symbol name  : ?i_MatrixRow@CalcEngine@@1HA (protected: static int CalcEngine::i_MatrixRow)
  Type         : data
  Name type    : …
Run Code Online (Sandbox Code Playgroud)

c++ windows linker-errors dllexport

31
推荐指数
3
解决办法
3万
查看次数

标签 统计

c++ ×1

dllexport ×1

linker-errors ×1

windows ×1