这可能是重复的,但有很多LNK2019
个问题,我无法全部阅读。这是我的问题:我收到以下错误消息:
4>ScatterometerView.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) public: __thiscall CPGLGraphBitDlgBSDF::CPGLGraphBitDlgBSDF(class CPGLGraph *)" (__imp_??0CPGLGraphBitDlgBSDF@@QAE@PAVCPGLGraph@@@Z)
referenced in function "public: void __thiscall CScatterometerView::DisplayBSDFPlot(class BSDF *)" (?DisplayBSDFPlot@CScatterometerView@@QAEXPAVBSDF@@@Z)
当我查看DUMPBIN
的输出时,我会看到构造函数:
12 B 00002EFF ??0CPGLGraphBitDlgBSDF@@QAE@PAVCPGLGraph@@@Z = @ILT+7930(??0CPGLGraphBitDlgBSDF@@QAE@PAVCPGLGraph@@@Z)
它包含__imp__
以外的所有内容。 DLL 中的类定义如下:
#define PGL_EXT_CLASS _declspec(dllexport)
class PGL_EXT_CLASS CPGLGraphBitDlgBSDF : public CPGLGraphDlg
{
public:
static const int numPointsToAvg = 3;
CPGLGraphBitDlgBSDF();
CPGLGraphBitDlgBSDF(CPGLGraph* _pGraph);
~CPGLGraphBitDlgBSDF(void);
// ...lots more functions...
}
并且可执行文件中的用法是:
CPGLGraph* pGraph = new CPGLGraph;
// ...code to fill in the graph data...
m_bsdf_plot = new CPGLGraphBitDlgBSDF(pGraph);
踢球者是班上的其他所有功能都有效;只有我最近添加的两个(包括这个构造函数)不起作用。较旧的功能没有__imp__
装饰,这似乎是我新添加的功能所必需的。
创建的.def
个文件没有定义任何功能,因此这似乎并不存在差异。我在链接器上使用了MAP file
,并且唯一具有__imp__
前缀的函数是Microsoft定义的函数。没有在 PGL.dll 中定义的单个函数,它们都可以正常工作。请告诉我在哪里寻找问题甚至是线索。
答案 0 :(得分:0)
#pragma once
#if defined DLL_EXPORT
#define MY_API_NAME __declspec(dllexport)
#else
#define MY_API_NAME __declspec(dllimport)
#endif
通常,你的DLL中存在.hpp。您需要在DLL项目的预处理器设置中定义DLL_EXPORT,因此在构建DLL并导入时将导出这些函数,当它在不同的项目中使用时。