1
18
有多种可能性:
1)
您使用AFX扩展模块。这意味着您正在实现一个MFC扩展DLL。对于这样的扩展DLL,您必须定义预处理器_afxext。将此设置在VisualC++项目的C++编译器设置中 见: 如何在MFC扩展dll中使用declspec(dllexport): http://support.microsoft.com/kb/128199 (目前我不能发布超过1个链接,因为我的声誉低于10个。稍后我将添加两个更重要的链接。因此,如果这是解决方案,请将其标记为加快进程的答案;) 正如所承诺的,这里有两个链接: AFX扩展模块结构: http://msdn.microsoft.com/en-us/library/sxfyk0zk.aspx TN033:MFC的dll版本: http://msdn.microsoft.com/en-us/library/hw85e4bb.aspx 2)您可能有重复的定义/声明。 |
2
38
预处理器语句的用途:
是为了确保头文件在.dll中声明类或函数为其定义的.dll中的\ declspec(dllexport),并声明为可能要使用它的任何其他.dll的\ declspec(dllimport)。 要使其工作,在编译exporting.dll时必须定义guictrls,而不是为任何其他.dll定义guictrls。一般情况下,您可以预期在项目属性中定义了GuigGurrl,在C/C++-GT;预处理器-gt;预处理器定义下。 您看到的编译器错误通常会发生,因为没有为执行导出的项目定义guictrls,或者为多个项目定义guictrls,通常是由于将粘贴从一个项目剪切到另一个项目而导致的。如果在包含在多个项目中的头文件中定义了guictrls,您也将看到这一点。 |
3
2
该警告通常是由使用不同dllimport的函数的重复定义引起的。你确定你没有这样做吗? |
4
1
[cmake不一致的dll链接] 我在uu declspec(dllexport)+u declspec(dllimport)中遇到以下问题+解决方案:
这很烦人,因为很多资料来源说要使用'set source file properties'命令来获得更好的粒度,但是文档不清楚file1.h在从其他目录包含时声明了什么…最好坚持
要捕获此问题,请执行以下操作:在foo.cpp文件中:
|
5
1
除了阅读警告消息外,还要注意它发生的位置 如果有多个项目作为工作区的一部分。 我浪费时间在DLL中寻找一个正确编译和链接的问题。工作区也在构建主应用程序,并且 我的错误是我无意中在应用程序本身的构建文件列表中包含了一个新的(dll)源文件 . 主程序需要dll头mynewdll.h来导入内容,但不需要源文件mynewdll.cpp。(代码是在运行时用一个DLL引入的。)我有一个习惯,将头文件和代码文件成对地包含到项目中,这就是我出错的地方。 如果我保持警惕并注意到DLL项目链接没有错误,并且是主程序投诉的话,我早就检测到错误了! 我的dll源代码和项目是没有错误的,这是我试图构建可执行文件的唯一方法,但有错误。 |
6
0
请注意,您没有在其他项目中定义导出的符号。同时手工清理所有中间文件并重新编译。 |
Guilherme Albertini · DLL中的类 6 年前 |
Naomi · C#dll资源文件更改语言 6 年前 |
AidanH · C#DLL语言翻译实现[关闭] 6 年前 |
subham · DLL函数调用不工作 6 年前 |
PixelThis · 为什么我的DLL要求我的程序有一个特定的名称? 6 年前 |
nemo · DLL的“好”调用约定是什么? 6 年前 |