跳转至

创建与使用DLL

开始

以获取鼠标位置的像素点的RGB值例子为说明.

创建一个getColor.cpp文件, 一个getColor.h文件, 用于生成DLL; 一个main.cpp, 用于调用DLL.

image-20220522095806879

编写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++

image-20220522104742002


getColor.cpp(8): warning C4273: “getcolor”: dll 链接不一致

(这个错误提示对使用没有影响)