pacman -S mingw-w64-i686-toolchain
然后到C:\msys64\mingw32.exe 双击运行。编译出来就是32位的。
Go语言的程序要编译成32位的比较简单只要设置环境变量set GOARCH=386
为什么需要32位的?因为要发送LVM_GETITEM
消息给32位程序参考。测试发现如果用64位的发送,不但获取不到信息,而且目标进程会直接闪退。32位对32位就没事。
想在vs code里面编译,需要写这样一个tasks.json文件
{
"version": "2.0.0",
"tasks": [
{
"label": "Build C Program",
"type": "shell",
"command": "gcc",
"args": [
"-m32",
"-shared",
"-o",
"\"${fileDirname}\\${fileBasenameNoExtension}.dll\"",
"\"${file}\"",
"-lcomctl32"
],
"options": {
"env": {
"MINGW_PACKAGE_PREFIX": "mingw-w64-i686",
"MINGW_PREFIX": "/mingw32",
"PATH": "C:/msys64/mingw32/bin;${env:PATH}"
}
},
"group": {
"kind": "build",
"isDefault": true
}
}
],
}
然后进到 .c 文件中,键盘 ctrl + ` 打开命令行窗口。按ctrl+shift+B运行构建任务。
不幸的是它似乎不支持中文路径。整个项目必须放到英文路径下。
所以,如果必须保持中文路径,那只能改用相对路径。
REM Build listview reader dll
set MINGW_PACKAGE_PREFIX=mingw-w64-i686
set MINGW_PREFIX=/mingw32
set PATH=PATH;C:\msys64\mingw32\bin
gcc -m32 -shared -o ./bin/abc.dll ./dll/abc.c -lcomctl32