创建与使用DLL
开始¶
以获取鼠标位置的像素点的RGB值例子为说明.
创建一个getColor.cpp文件, 一个getColor.h文件, 用于生成DLL; 一个main.cpp, 用于调用DLL.
编写DLL¶
在getColor.cpp中编写以下内容
#include<windows.h>
#include<winddi.h>
#include "getColor.h"
#pragma comment (lib,"User32.lib")
#pragma comment (lib,"gdi32.lib")
int getcolor(void){
POINT p;
GetCursorPos(&p);
HDC dc=GetDC(0);
int BGR = GetPixel(dc,p.x,p.y);
int red = BGR & 255;
int green = BGR>>8 &255;
int blue = BGR>>16 &255;
return BGR;
}
在getColor.h中编写以下内容
#pragma once
#ifdef API_EXPORTS
#define API __declspec(dllexport) //用名字 API 替换名字 __declspec(dllexport)
#else
#define API __declspec(dllimport) //用名字 API 替换名字 __declspec(dllimport)
#endif
API int getcolor(void);
__declspec(dllexport) 用来说明了后面的getcolor函数是导出的.
生成DLL¶
这里用到cl.exe, 是visual studio自带的, 安装msvc组件才有. 我的位置是在
D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\HostX64\x64
执行以下命令会生成DLL
cl /LD getColor.cpp
调用¶
在main.cpp中调用
#include <iostream>
#include "getColor.h"
#pragma comment (lib,"getColor")
using namespace std;
int main(){
int BGR=getcolor();
int red = BGR & 255;
int green = BGR>>8 &255;
int blue = BGR>>16 &255;
cout<<"颜色R:"<<red<<"\tG:"<<green<<"\tB:"<<blue<<endl;
return 0;
}
编译main.cpp
cl main.cpp
执行
D:\Users\--\Desktop\demo>main.exe
颜色R:230 G:230 B:230
错误解决¶
xxx\getColor.h: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
(这个错误提示对使用没有影响)
将文件转为ASCI编码, 我是用的工具是notepad++
getColor.cpp(8): warning C4273: “getcolor”: dll 链接不一致
(这个错误提示对使用没有影响)