C++ DLL编程时报错:无法解析的外部符号
2017-05-18 15:04
1336 查看
问题: 1
error LNK2001: 无法解析的外部符号 _xMonitorFromPoint@12
e:\visual studio 2010\Projects\myTest\ModifyResolutionC\ModifyResolutionC\modifyResolution.obj
ModifyResolutionC;错误 2
error LNK1120: 1 个无法解析的外部命令 e:\visual studio 2010\Projects\myTest\ModifyResolutionC\Debug\ModifyResolutionC.dll
1 1
ModifyResolutionC
源文件:
ModifyResolutionC.h:
ModifyResolutionC.cpp:
#include <iostream>
#define DLLEXPORT //定义了预处理器变量 DLLEXPORT
#include "modifyResolution.h"
#include <windows.h>
#include "multimon.h"
#include <string.h>
#include <Winuser.h>
using namespace std;
char* getResolution(){
POINT p;
p.x = 23;
p.y =23;
HMONITOR h = MonitorFromPoint(p,MONITOR_DEFAULTTONULL);
return reinterpret_cast<char*>(h);//转换为char*
}
MonitorFromPoint的功能参见:https://msdn.microsoft.com/en-us/library/dd145062(VS.85).aspx
此代码确认坐标是否在显示器上存在。
解决问题:
在网上也搜了很多,很多人说的是没有lib库,按照百度经验上去寻找依赖项http://jingyan.baidu.com/article/4d58d54135d7a79dd4e9c0ad.html,发现我用的user.lib是存在于依赖库中的。http://www.cnblogs.com/hiloves/p/4678848.html这篇文字还采取了恨铁不成钢的教育形式说是C和C++混编造成的,按照他的意思修改错误更多。后来想是不是在引入头文件中有多余的并没有依赖项,所以注销了多余引用的头文件:
#include "modifyResolution.h"
#include <windows.h>
//#include "multimon.h" //注销项
#include <string.h>
#include <Winuser.h>编译通过,在java中调用C++产生的dll文件成功。
error LNK2001: 无法解析的外部符号 _xMonitorFromPoint@12
e:\visual studio 2010\Projects\myTest\ModifyResolutionC\ModifyResolutionC\modifyResolution.obj
ModifyResolutionC;错误 2
error LNK1120: 1 个无法解析的外部命令 e:\visual studio 2010\Projects\myTest\ModifyResolutionC\Debug\ModifyResolutionC.dll
1 1
ModifyResolutionC
源文件:
ModifyResolutionC.h:
#ifndef FIRSTDLL_H #define FIRSTDLL_H #ifdef DLLEXPORT #define DLLOPTION _declspec(dllexport) //表明标有此宏定义的函数和类是dll文件的导出函数和类,是dll文件的对外接口 #else #define DLLOPTION _declspec(dllimport) //表明标有此宏定义的函数和类的定义在dll文件中 #endif extern "C" DLLOPTION char* getResolution(); #endif
ModifyResolutionC.cpp:
#include <iostream>
#define DLLEXPORT //定义了预处理器变量 DLLEXPORT
#include "modifyResolution.h"
#include <windows.h>
#include "multimon.h"
#include <string.h>
#include <Winuser.h>
using namespace std;
char* getResolution(){
POINT p;
p.x = 23;
p.y =23;
HMONITOR h = MonitorFromPoint(p,MONITOR_DEFAULTTONULL);
return reinterpret_cast<char*>(h);//转换为char*
}
MonitorFromPoint的功能参见:https://msdn.microsoft.com/en-us/library/dd145062(VS.85).aspx
此代码确认坐标是否在显示器上存在。
解决问题:
在网上也搜了很多,很多人说的是没有lib库,按照百度经验上去寻找依赖项http://jingyan.baidu.com/article/4d58d54135d7a79dd4e9c0ad.html,发现我用的user.lib是存在于依赖库中的。http://www.cnblogs.com/hiloves/p/4678848.html这篇文字还采取了恨铁不成钢的教育形式说是C和C++混编造成的,按照他的意思修改错误更多。后来想是不是在引入头文件中有多余的并没有依赖项,所以注销了多余引用的头文件:
#include "modifyResolution.h"
#include <windows.h>
//#include "multimon.h" //注销项
#include <string.h>
#include <Winuser.h>编译通过,在java中调用C++产生的dll文件成功。
相关文章推荐
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
- 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
- vs2008中,静态库调用时报错:“无法解析的外部符号 _,该符号在函数 _wmain 中被引用”的解决方法
- 关于各种无法解析的外部符号问题的相应解决方案
- cuda error2019 无法解析外部符号
- error LNK2001: 无法解析的外部符号 __imp__RegEnumKeyExA@32
- QT无法解析的外部符号解决办法
- 无法解析的外部符号 WinMain,该符号在函数 WinMainCRTStartup 中被引用 ENTRY:"WinMainCRTStartu
- cocos2dx--cocos2dx3.1.1执行报无法解析的外部符号
- error LNK2019: 无法解析的外部符号 "int __stdcall lstrlenWInternal(unsigned short const *)" (?lstrlenWInternal
- 使用DLL引起的error LNK2019: 无法解析的外部符号
- thread_local_storage.obj : error LNK2001: 无法解析的外部符号 pTlsCallback
- error LNK2001: 无法解析的外部符号 "public: static int __cdecl
- 在C++控制台项目中使用C工程代码时的注意,避免出现error LNK2019: 无法解析的外部符号
- error LNK2019:无法解析的外部符号的一个原因
- error LNK2019: 无法解析的外部符号(编程解决方法)
- 无法解析的外部符号_main,该符号在函数中被引用
- 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
- error LNK2019:: 无法解析的外部符号 _main ,该符号在函数 _mainCRTStartup 中被引用
- 编译时,遇到errorLNK:无法解析的外部符号几种分析情况