| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 732 人关注过本帖
标题:怎么找到gdiplus.dll?
只看楼主 加入收藏
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:646
专家分:761
注 册:2019-10-11
收藏
 问题点数:0 回复次数:9 
怎么找到gdiplus.dll?
今天突然发神经,想备份一份gdiplus.dll
我在程序中只输入二句,仅仅两句,(没有报错,只是测试)
Declare Long GdiplusShutdown in GdiPlus long token
GdiplusShutdown(1)
然后我在当前目录下没有找到gdiplus.dll,然后把c:\windows\system32和c:\windows\syswow64下的gdiplus.dll都改名为gdiplus0.dll,把windows环境变量path下所有能找到的gdiplus.dll都改名了,然后重启运行上面两句,还不报错,问题来了,那么这个gdiplus.dll到底藏在哪里?
搜索更多相关主题的帖子: Long windows dll 运行 报错 
2026-08-04 10:40
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:646
专家分:761
注 册:2019-10-11
收藏
得分:0 
用Process Explorer找到了
2026-08-04 11:04
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:646
专家分:761
注 册:2019-10-11
收藏
得分:0 
不过又有新问题了,我把这个文件复制到当前目录,反而出问题了,真是欺负菜鸟
2026-08-04 11:11
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:186
专家分:392
注 册:2021-10-23
收藏
得分:0 
回复 楼主 sych
自己写个进程模块中去找或(任务管理器,性能,资源监视器……。)
图片附件: 游客没有浏览图片的权限,请 登录注册

2026-08-04 11:11
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:646
专家分:761
注 册:2019-10-11
收藏
得分:0 
嗯,通过上面的软件找到了,然后又经过反复测试,如果把gdiplus.dll复制到当前目录,如果函数声明里既有"in gdiplus.dll"又有"in gdiplus"就会出问题(不报错,但会出问题),如果全部是"in gdiplus.dll"或者"in gdiplus"则都正常
2026-08-04 11:40
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1241
专家分:1687
注 册:2021-10-13
收藏
得分:0 
回复 5楼 sych
语法要规范,统一加.dll,或者就用win32api
2026-08-05 00:05
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:646
专家分:761
注 册:2019-10-11
收藏
得分:0 
以下是引用foxfans在2026-8-4 11:11:25的发言:

自己写个进程模块中去找或(任务管理器,性能,资源监视器……。)

这个技术还是很实用的,有时候想知道这个exe调用了哪些dll
2026-08-05 08:24
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:646
专家分:761
注 册:2019-10-11
收藏
得分:0 
网上抄的,简单修正,可以使用
DECLARE INTEGER EnumProcessModulesEx IN psapi.dll ;
    INTEGER hProcess, ;
    string @lphModule, ;
    INTEGER cb, ;
    INTEGER @lpcbNeeded, ;
    INTEGER dwFilterFlag

*!* 声明 GetModuleFileNameEx 来获取模块的完整路径
DECLARE INTEGER GetModuleFileNameEx IN psapi.dll ;
    INTEGER hProcess, ;
    INTEGER hModule, ;
    STRING @lpFilename, ;
    INTEGER nSize

*!* 声明 OpenProcess 以获取进程句柄
DECLARE INTEGER OpenProcess IN kernel32.dll ;
    INTEGER dwDesiredAccess, ;
    INTEGER bInheritHandle, ;
    INTEGER dwProcessId

*!* 声明 CloseHandle 释放句柄
DECLARE INTEGER CloseHandle IN kernel32.dll INTEGER hObject
Declare Integer GetCurrentProcessId In kernel32.Dll
tnProcessId=GetCurrentProcessId()

* 参数:目标进程的 ID
*LPARAMETERS tnProcessId

LOCAL hProcess, lnBufSize, lnNeeded, lpHModule, lcBuf, lnIndex, lcModuleName

* 1. 打开进程,需要 PROCESS_QUERY_INFORMATION 和 PROCESS_VM_READ 权限
hProcess = OpenProcess(0x0400 + 0x0010, 0, tnProcessId)

IF hProcess = 0
    MESSAGEBOX("无法打开进程,错误代码:" + TRANSFORM(GetLastError()))
    RETURN
ENDIF

* 2. 第一次调用:cb=0,获取所需缓冲区大小
lnBufSize = 0
lnNeeded = 0
= EnumProcessModulesEx(hProcess, 0, 0, @lnNeeded, 0x03) && dwFilterFlag = 0x03 (ListModulesAll)

IF lnNeeded = 0
    = CloseHandle(hProcess)
    RETURN
ENDIF

* 3. 准备缓冲区
lnBufSize = lnNeeded
lpHModule = REPLICATE(CHR(0), lnBufSize)  && 分配内存

* 4. 第二次调用:获取所有模块句柄
= EnumProcessModulesEx(hProcess, @lpHModule, lnBufSize, @lnNeeded, 0x03)

* 5. 遍历模块,获取名称
FOR lnIndex = 1 TO lnNeeded / 4  && 每个句柄占4字节(32位)
    * 从缓冲区中提取模块句柄
    lcModule = CTOBIN(SUBSTR(lpHModule, (lnIndex - 1) * 4 + 1, 4),"4rs")
    lcModuleName = SPACE(255)
    = GetModuleFileNameEx(hProcess, lcModule, @lcModuleName, 255)
    lcModuleName = STRTRAN(lcModuleName, CHR(0), "") && 去除空字符
    ? "模块 " + TRANSFORM(lnIndex) + ": " + lcModuleName
ENDFOR

= CloseHandle(hProcess)
2026-08-05 08:41
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:186
专家分:392
注 册:2021-10-23
收藏
得分:0 
嗯,strtran(,chr(0) 那你不能用space(255) 可以换replica(0h00,255)
OR:
nRet = GetModuleFileNameEx(hProcess, lcModule, @lcModuleName, 255)
lcModuleName = LEFT(lcModuleName, nRet)
2026-08-05 13:03
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:646
专家分:761
注 册:2019-10-11
收藏
得分:0 
好的,改成lcModuleName = STREXTRACT(lcModuleName,"", CHR(0)) && 去除空字符

[此贴子已经被作者于2026-8-5 14:32编辑过]

2026-08-05 13:07
快速回复:怎么找到gdiplus.dll?
数据加载中...
 
   
关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018680 second(s), 10 queries.
Copyright©2004-2026, BCCN.NET, All Rights Reserved