我想通过阅读SO和this MSDN article了解LNK2019错误的主旨。
我有一个为什么的问题和一个如何的问题(两者都已在标题中提出)。
为什么库会提供带有未实现功能的.cpp文件?我猜答案是:“所以最终用户可以实现这些功能他们自己,或“链接”其他一些事情。“(如果我错了请纠正我,但我会继续这个假设。)
例如,在下面的屏幕截图中(单击以查看大图),我显示了遇到的LNK2019错误以及有问题的文件wx.cpp
。
类mglCanvasWX
中的所有方法都没有实现(是的,我已向下滚动:-)。这里是wx.cpp
a permanent Pastebin,而the output,以防有人想要查看代码,但我不会要求任何人这么做。
如何实施此类功能?
我猜测它是包含这些实现的 .dll 文件。因此,我需要找到实现Window
,ToggleAlpha
,ToggleLight
等的 .dll 文件。 (我猜我可以忽略所有其他类型的文件, .obj , .lib , .exp 等)但是如何我是否知道 where 以找到那些 .dll 文件? - 甚至知道 .dll 文件 实施那些功能,因为它们是二进制(非人类可读)文件?
我很遗憾一次提出两个问题,但我认为这些是解决此链接器错误需要了解的基本内容。 (我觉得我错过了一个单一的概念,即使我需要在两个问题中提问。)提前感谢您提供任何指导,并且很抱歉添加到现有的LNK2019堆中有关SO的问题......
这可能是相关的:
# define MGL_EXPORT __declspec(dllexport)
但是我不确定这是否表明这个未实现的类被导出为DLL(这样的DLL有什么用途?),或者表明这个类必须 实现一个DLL文件(这会更有意义)。
另外,我说出我的问题的原因是“为什么会有一个库...”,这个项目中的另一个依赖项mgl-fltk
提供了a similar source ,但 实现类似的类及其功能(并构建良好)!查看屏幕截图here。但是,它的类定义与mgl-wx
不同,省略了MGL_EXPORT
,暗示我FLTK 意图在外部实现。
class mglCanvasFL : public mglCanvasWnd
好的,经过一番思考之后,我想出了一个理论,但只有经验丰富的软件开发人员可以告诉我它是否合理/有意义。
MathGL的开发人员可能根本没有实现这些定义吗?也就是说,MathGL是否可能还不支持wxWidgets?
请参阅原始MathGL源代码中的文件:
QT,FLTK和GLUT 所有实施他们的mglCanvasQT
,mglCanvasFL
和mglCanvasGLUT
,,例如
// qt.cpp
void mglCanvasQT::Animation() { QMGL->animation(true); }
void mglCanvasQT::ToggleAlpha() { QMGL->setAlpha(!QMGL->getAlpha()); }
// fltk.cpp
void mglCanvasFL::Animation() { Fl::lock(); mgl_sshow_cb(0,mgl); Fl::unlock(); }
void mglCanvasFL::ToggleAlpha() { Fl::lock(); mgl->toggle_alpha(); Fl::unlock(); }
// glut.cpp
class mglCanvasGLUT : public mglCanvasGL
{
public:
// ...
void ToggleAlpha() { _mgl_key_up('r',0,0); }
void Animation() { _mgl_key_up('m',0,0); } ///< Run slideshow (animation) of frames
// ...
}
并且只有mglCanvasWX
未实现,只有mglCanvasWX
在其类名前面有MGL_EXPORT
宏。
那么可能的解释是什么?那个WX支持还没有?或者,对WX的支持存在,但发现作为外部库(DLL)更容易提供?如果有经验的软件开发人员可以权衡这一点,我真的很感激......
答案 0 :(得分:2)
Holy J. Skeet,我的理论证明是真的。
经过几个小时的实验(并写下这个问题),我开始意识到,或许wxWidgets并没有实现与MathGL一起使用。 (参见上面的“理论”编辑。)我在这个新的上下文中做了一些谷歌搜索,并且瞧! - 来自MathGL的维护者本人(他的名字我只是认可,因为它是上面7-Zip截图中的用户/组名称) -
MortenMacFly 1/22/11
您好,我想知道wx样本正在做什么。似乎有一个 存根已准备好,但尚未实现功能。我很乐意使用 这个库在wxWidgets项目中。任何提示?
Alexey Balakin 1/25/11
嗨,
基本上是的。多年前我从wxWidgets切换到Qt ......所以, 我已经忘记了许多wxWidget percularity并决定停止制作 基于wxWidget的工作窗口。有几个问题:MathGL 已经有2个(基于FLTK和Qt),我没有那么多时间 写|测试wxWidget一:(。
所以,现在你可以做以下事情:
1)使用MathGL生成的RGB位图来显示你的wxWidget图像 控制。这里有一个样本 http://mathgl.sourceforge.net/mathgl_en/mathgl_en_10.html#Drawing-in-memory
2)使用mgl / mgl_wx.h中定义的wxMathGL小部件。我非常希望它是什么 应该按原样工作,但我没有测试它:(
3)帮我写一下|测试wxMathGL小部件和类mglGraphWX哪个 将显示基于wxWidget.I(和其他我的控件)的窗口 想)会非常感激。
thread in which I found this也讨论了一些替代方案,但我不知道它们是否有效。