如何加入未声明的API?

robter5611 2003-05-18 02:19:47
我的编译环境是Masm32V4,是落后了点,不过找不到更新的,只有用这个.
他的 user32.inc 中不包含 wsprintf 这个函数,我想把他加上.于是打开 user32.inc,加入以下一行:
wsprintf proto:dword,:dword vararg

结果用来编译程序的时候出错,意思就是 vararg 这个出错了.
去掉 vararg 又不行,因为 wsprintf 的参数是不固定的嘛.
所以这个问题我一直搞不定.
请各位大侠多多指教!
多谢了哈!
...全文
31 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2003-06-27
  • 打赏
  • 举报
回复
唉, 最近上网非常的困难.

LoadLibrary 和 GetProcAddress 若返回的值为 NULL, 则调用失败; 否则是成功的.
robter5611 2003-06-27
  • 打赏
  • 举报
回复
zara兄: 你的做法完全正确.
正如兄所说,我错就错在把函数名写成了 wsprintf,应该是 wsprintfA,或wsprintfW.
多谢两位老大.
BugBuilder 2003-06-24
  • 打赏
  • 举报
回复
wsprintfA PROTO C :DWORD,:VARARG
wsprintf equ <wsprintfA>

这是偶的

COPY出来给你

好像32位里只有wsprintfA 那个没A的只是 equ 来的 为了方便

就像 MESSAGEBOX 和MESSAGEBOXA
robter5611 2003-06-23
  • 打赏
  • 举报
回复
多谢老大.
怎么检查有没有成功?
我不知道.
多谢.
zara 2003-06-21
  • 打赏
  • 举报
回复
你在 LoadLibrary 和 GetProcAddress 后有没有检查过是否成功? 如果都成功的话, 就和这个方法没有直接关系了; 如果不成功的话, 用 GetLastError 查看一下出错的具体原因.
robter5611 2003-06-16
  • 打赏
  • 举报
回复
基本上就是一般的内存错误.某某内存不能写,只能读之内.
我反汇编之后找到那条代码:
  mov cx, [exc]
  也有可能是
mov cx,ecx
记不清楚了.
但是看不出是在哪儿错了.
zara 2003-06-16
  • 打赏
  • 举报
回复
能讲具体点儿吗?
robter5611 2003-06-15
  • 打赏
  • 举报
回复
zara兄: 我照你的做法做了,能通过编译,但运行时有错误,为什么?
WorldCreater 2003-05-28
  • 打赏
  • 举报
回复
http://spiff.tripnet.se/~iczelion/files/masm32v8.zip
robter5611 2003-05-27
  • 打赏
  • 举报
回复
多谢各位老大.
我上不网,要不然也不会有这个问题了.
zara兄的做法我下去试试,回来给分.
taianmonkey 2003-05-19
  • 打赏
  • 举报
回复
asm.yeah.net
LeLeGhost 2003-05-19
  • 打赏
  • 举报
回复
我觉得 JennyVenus 说的方法,比较已于实现。
AI1982 2003-05-19
  • 打赏
  • 举报
回复
www.movsd.com
masm32的官方网站
紫郢剑侠 2003-05-19
  • 打赏
  • 举报
回复
补充一下
LoadLibraryA函数先载入那个.dll,
GetProcAddress来获取相关函数的入口地址,
PUSH 所需的参数1
。。。
PUSH 所需的参数N

CALL 入口地址
用户 昵称 2003-05-18
  • 打赏
  • 举报
回复
下载一个更新的吧。我的masm32自动就能用了
push offset text1
push offset text2
lea eax, buf
push eax
call wsprintf
invoke MessageBox, NULL, addr buf, NULL, MB_OK
zara 2003-05-18
  • 打赏
  • 举报
回复
补充一下, 作为一种方法, 对一些特殊的,没有载入档案或者是只有.dll而没有相关.lib的函数的使用, 可以通过LoadLibraryA函数先载入那个.dll, 再GetProcAddress来获取相关函数的入口地址, 最后再通过这个地址来使用那个函数.
zara 2003-05-18
  • 打赏
  • 举报
回复
如果.inc中没有这个API的定义, 那么相应的.lib中一般也不会有它的导入参数, 即使这样加了也一样还是不行的. 不过wsprintf是一个最常见的函数之一, 应该有的. 或者楼主可以到asm.yeah.net(罗云彬的编程乐园)去看看, 那里有masm32v7和masm32v8下载的, 这里面的肯定有wsprintf的定义.
bob79 2003-05-18
  • 打赏
  • 举报
回复
我的 user32.inc中的
wsprintfA PROTO C :DWORD,:VARARG
wsprintf equ <wsprintfA>

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧