Win32 编程问题,请教各位...

coka 2005-03-29 09:36:40
不用看具体的语法,仅从api调用的步骤来看何处错了:

偶先定义了一个子过程,目的是弹出通用页面设置对话框

_PageSetup proc
local @stPS:PAGESETUPDLG

invoke RtlZeroMemory,addr @stPS,sizeof @stPS ;为该结构初始化内容为0
mov @stPS.lStructSize,sizeof @stPS
push hWinMain
pop @stPS.hwndOwner
invoke PageSetupDlg,addr @stPS ;弹出通用页面设置对话框
.if eax && @stPS.hDevMode
mov eax,@stPS.hDevMode
mov eax,[eax]
invoke wsprintf,addr szBuffer,addr szFormatPrt,eax ;
invoke MessageBox,hWinMain,addr szBuffer,\ ;返回用户选择
addr szCaption,MB_OK ;的打印机名称
.endif
ret ;返回

_PageSetup endp

然后在 主窗体过程 的 鼠标按下消息中调用该子过程:

... ...
.elseif eax==WM_LBUTTONDOWN
call _PageSetup
... ...

为何运行总是提示 xxx地址不能为写...我调试了一下 在调用到 PageSetupDlg 时就无法返回
请问哪里有错误,谢谢各位
...全文
153 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
北漂17载 2005-04-03
  • 打赏
  • 举报
回复
你写成win32程序试一下吧
surstar 2005-03-31
  • 打赏
  • 举报
回复
怎么是汇编呢?? 不是很熟悉呀~,帮你顶, ~
coka 2005-03-31
  • 打赏
  • 举报
回复
打印机装好...
北漂17载 2005-03-30
  • 打赏
  • 举报
回复
@stPS 定义的是指针还是变量
如果是指针 那肯定是错误的了 :
PAGESETUPDLG* pd;
ZeroMemory(&pd,sizeof(pd));//内存写错误
但 PageSetupDlg,addr @stPS 能编译过去么?!

还有 “在调用到 PageSetupDlg 时就无法返回请问哪里有错误,谢谢各位”
是指 local @stPS:PAGESETUPDLG
还是 PageSetupDlg,addr @stPS ?

我觉得用c翻译过来应该是

HWND hWinMain;
void PageSetup()
{

PAGESETUPDLG pd;
ZeroMemory(&pd,sizeof(pd));
pd.lStructSize= sizeof(pd);
pd.hwndOwner = hWinMain;
PageSetupDlg(&pd);
//、、、、
}


:)
对win32汇编不熟 不如直接写win32 sdk 程序来的直接,我觉得win32汇编对学习汇编帮助不大
jronald 2005-03-30
  • 打赏
  • 举报
回复
函数调用应该没问题啊
是不是打印机没装好?
coka 2005-03-30
  • 打赏
  • 举报
回复
还有一个现象:弹出 页面设置 通用对话框之后,为何点取消按钮无问题,可以返回原来的
对话框,但一点确定键之后就会发生 xxx地址不可写 问题呢?谢谢... ...
coka 2005-03-30
  • 打赏
  • 举报
回复
to jronald(深白色)
去掉了也不行

to lanhai(一种心痛的感觉)
@stPS 定义的是变量
jronald 2005-03-29
  • 打赏
  • 举报
回复
打错了 是.if .endif
jronald 2005-03-29
  • 打赏
  • 举报
回复
你把 .if .end 这段去掉试试先
4inSky 2005-03-29
  • 打赏
  • 举报
回复
你在这里local @stPS:PAGESETUPDLG定义了一个结构体是不是?

然后invoke RtlZeroMemory,addr @stPS,sizeof @stPS ;为该结构初始化内容为0 是不是?

我是这么考虑的,如果用C++形容,就好像这个样子

结构体* p = new 结构体;
p = NULL;

然后,在使用P的时候,自然会出现异常了。p->

不知我的理解对不对,但看你的用法,应该是这个样子的。
coka 2005-03-29
  • 打赏
  • 举报
回复
等待中~~~
lpschenshengxue 2005-03-29
  • 打赏
  • 举报
回复
up
coka 2005-03-29
  • 打赏
  • 举报
回复
没人么...心好凉... :(
coka 2005-03-29
  • 打赏
  • 举报
回复
up
最近在研究如何用 易语言 连接oracle数据库,搜集了网上很多源码和请教了一些人都没能测试成功。 经过不懈努力,我终于测通了!哈哈哈哈~ 不过,我想吐槽的是: 在搜集资料过程中,发现很多人都说易语言很难连上oracle,讲真,我也觉得官方不够给力! oracle作为全球第一大数据库厂商,为什么出易语言的官方支持库来适配呢? 虽然说可以通过调用windows的odbc来连,但这对不懂的人来说是很困难的一件事! 所以,真心希望官方能开发出oracle的支持库!!! 在测试过程中,我总结了以下几个需要注意的点: 1、无论你的电脑是32位还是64位,都必须安装32位的oracle客户端。安装类型可以是:管理员、运行时。 2、从oracle 11g以后,oracle官方不再提供32位的客户端安装介质。目前最新的oracle客户端为win32_11gR2_client.zip,可直接从官网下载。 3、选择DRIVER连接时,需要先在$ORACLE_HOME/network/admin/tnsnames.ora文件中的定义的一个连接名,测试成功后再将连接名配置在SERVER(连接服务名)中。 4、选择DSN连接时,需要先在OS系统数据源(32位)中配置好数据源,测试成功后再将数据源名称配置在DSN(数据源)中。 只要你按照以上几点来,就肯定可以用易语言连接oracle,并执行简单查询。 我自己的测试代码已分享出来了,需要oracle客户端的朋友可以去官方下载,也可以私信我。 好了,第一次参加这么盛大的活动,小小意思,请各位看官指点,谢谢!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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