aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 12476|回复: 3

一个显示属性结构体,如何转aardio

[复制链接]

26

主题

76

回帖

649

积分

荣誉会员

积分
649
发表于 2011-4-20 00:13:05 | 显示全部楼层 |阅读模式
DEVMODE结构,EnumDisplaySettings 这个函数的一个参数。 我对照转了半天,运行结果不对,怀疑结构体转错了。麻烦熟悉的前辈转下,万分感谢!
DEVMODE结构具有如下形式:
typedef struct _devicemode

{ /* dvmd */

TCHAR dmDeviceName[32];

WORD dmSpecVersion;

WORD dmDriverVersion;

WORD dmSize;

WORD dmDriverExtra;

DWORD dmFields;

short dmOrientation;

short dmPaperSize;

short dmPaperLength;

short dmPaperWidth;

short dmScale;

short dmCopies;

short dmDefaultSource;

short dmPrintQuality;

short dmColor;

short dmDuplex;

short dmYResolution;

short dmTTOption;

short dmCollate;

TCHAR dmFormName[32];

WORD dmUnusedPadding;

USHORT dmBitsPerPel;

DWORD dmPelsWidth;

DWORD dmPelsHeight;

DWORD dmDisplayFlags;

DWORD dmDisplayFrequency;

} DEVMODE;

39

主题

163

回帖

1351

积分

四级会员

积分
1351
发表于 2011-4-20 07:51:04 | 显示全部楼层
回复 donque2010 的帖子

aardio.exe —>[右侧]工具—>编码—>aardio代码转换工具

26

主题

76

回帖

649

积分

荣誉会员

积分
649
 楼主| 发表于 2011-4-20 11:50:32 | 显示全部楼层
本帖最后由 donque2010 于 2011-4-20 11:54 编辑

很感谢,转过来了,但还是取不到结果。
麻烦再看下我的api  声明 是否有错
vb api声明:
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Long

//aardio  代码
import console;//打开控制台
EnumDisplaySettings = ::User32.api("EnumDisplaySettingsA","int(int lpszDeviceName,int iModeNum,struct lpDevMode)")
//直接用aatuo编码转换工具出来的声明如下
//EnumDisplaySettings = ::User32.api("EnumDisplaySettingsA","int(int lpszDeviceName,int iModeNum,pointer& lpDevMode)")
DEVMODE =
class {
BYTE dmDeviceName[32];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;

INT dmFields;
word dmOrientation;
word dmPaperSize;
word dmPaperLength;
word dmPaperWidth;
word dmScale;
word dmCopies;
word dmDefaultSource;
word dmPrintQuality;
word dmColor;
word dmDuplex;
word dmYResolution;
word dmTTOption;
word dmCollate;

BYTE dmFormName[32];
WORD dmUnusedPadding;
WORD dmBitsPerPel;
INT dmPelsWidth;
INT dmPelsHeight;
INT dmDisplayFlags;
INT dmDisplayFrequency;
}
var devm=DEVMODE();
EnumDisplaySettings (0,0,devm);

//用aatuo转的api声明传递指针会出错
//EnumDisplaySettings (0,0,topointor(devm));
console.log(devm.pelsWidth,devm.pelsHeight)

//打印出来是null
execute("pause") //按任意键继续
;//关闭控制台

26

主题

76

回帖

649

积分

荣誉会员

积分
649
 楼主| 发表于 2011-4-20 20:08:59 | 显示全部楼层
找到原因了,传入的结构体加上输出参数符号 & 就可以返回了
EnumDisplaySettings = ::User32.api("EnumDisplaySettingsA","int(int lpszDeviceName,int iModeNum,struct& lpDevMode)")
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-4-18 19:40 , Processed in 0.061052 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表