VC和C#中getlasterror怎样用

VC和C#中getlasterror怎样用,第1张

可以用一下函数来进行:

1、BOOL SetDlgItemText( HWND hDlg,

int nIDDlgItem,

LPCTSTR lpString

)

SetDlgItemText函数

该SetDlgItemText函数设置对话框中的标题或控件的文本。

参数

hDlg

[in]句柄对话框,其中包含了控制。

nIDDlgItem

[in]指定的标题或文字控制设置。

lpString

[in]指向NULL结尾的字符串,其中包含的文本复制到控制。

返回值

如果函数成功,返回值为非零。

如果函数失败,返回值是零。为了获得更多错误信息,调用GetLastError。

备注

该SetDlgItemText函数WM_SETTEXT消息发送到指定的控制。

在Windows 95/98/Me:SetDlgItemTextW是支持的Unicode(MSLU)微软层。要使用此,您必须将某些文件到您的应用,概述了对Unicode的Microsoft层在Windows 95/98/Me系统。

例如

有关示例,请参阅创建一个简单的列表框。

功能信息

最低DLL版本 user32.dll

在Winuser.h中HeaderDeclared,头文件:winuser.h

import libraryUser32.lib

最低 *** 作系统Windows 95,Windows NT 3.1

UnicodeImplemented为ANSI和Unicode版本。

2、int wsprintf( LPTSTR lpOut,

LPCTSTR lpFmt,

...

)

第一个参数是一个指向数组的指针,后面的参数和printf的参数一样的。该函数的功能是将后面的参数的内容输出到第一个参数中。第二个参数一般要用TEXT()宏包起来。

3、LPTSTR lstrcat( LPTSTR lpString1,

LPTSTR lpString2

)

lstrcat函数

这个函数一个字符串附加到另一个。

参数

lpString1

[中,out]指向一个空结束的字符串。该缓冲区必须足够大,包含两个字符串。

lpString2

[in]指向空终止字符串附加到在lpString1参数指定的字符串。

返回值

如果函数成功,返回值是对缓冲区的指针。

如果函数失败,返回值为NULL和lpString1不得空终止。

备注

安全警告:

使用此功能不当,可能会损害您的应用程序的安全。此函数使用结构化异常处理(SEH)捕获的访问冲突和其他错误。当这个函数捕捉SEH的错误,则返回空不空结束的字符串,而没有通知错误的来电。调用方没有把握地说,没有足够的空间是错误的条件。

lpString1必须足够大,加上lpString2和闭幕'\ 0',否则可能会出现缓冲区溢出。缓冲区溢出可能导致对应用服务拒绝攻击,如果发生访问冲突。在最坏的情况下,缓冲区溢出可能允许攻击者注入到可执行代码的过程中,特别是如果lpString1是一个基于堆栈的缓冲区。

考虑使用StringCchCat代替。

审查安全方面的考虑:Windows用户界面,然后继续。

在Windows 95/98/Me:lstrcatW是支持的Unicode(MSLU)微软层。虽然W版已经在微软Windows 98/Me的存在,它包括给予更多的一致行为在所有的Windows *** 作系统。要使用此,您必须将某些文件到您的应用,概述了对Unicode的Microsoft层在Windows 95/98/Me系统。

例如

有关示例,请参见读取邮件槽。

功能信息

最低DLL版本 kernel32.dll

在Winbase.h HeaderDeclared,头文件:winuser.h

import libraryKernel32.lib

最低 *** 作系统Windows 95,Windows NT 3.1

UnicodeImplemented为ANSI和Unicode版本。

WriteProcessMemory此函数能写入某一进程的内存区域。入口区必须可以访问,否则 *** 作将失败。

此函数能写入某一进程的内存区域(直接写入会出Access Violation错误,故需此函数)。

VC++声明

BOOL WriteProcessMemory(

HANDLE hProcess,

LPVOID lpBaseAddress,

LPVOID lpBuffer,

DWORD nSize,

LPDWORD lpNumberOfBytesWritten

)

参数:

hProcess

由OpenProcess返回的进程句柄。

如参数传数据为 INVALID_HANDLE_VALUE 【即-1】目标进程为自身进程

lpBaseAddress

要写的内存首地址

再写入之前,此函数将先检查目标地址是否可用,并能容纳待写入的数据。

lpBuffer

指向要写的数据的指针。

nSize

要写入的字节数。

返回值

非零值代表成功。

可用GetLastError获取更多的错误详细信息。

要求

*** 作系统版本: Windows CE 2.0及以上版本。

所在头文件: Winbase.h

链接库: Nk.lib

当调用一个windows函数时,它首先要检验传递给它的各个参数的有效性,然后再设法执行任务.如果传递一个无效参数,或者由于某种原因无法执行这项 *** 作,那么 *** 作系统就会返回一个值,指明该函数在某种程度上运行失败了。

windows函数常用的返回值类型:

void

bool:0,非0,ture,false

handle:handle,null,invalid_handle_valid)

pvoid:null,pvoid

long/dword:具体函数而定

...

microsoft编译了一个所有可能的错误代码列表,并且为每个错误代码分配了一个32位的号码. winerror.h头文件(大约2万多行)包含了micorsoft定义的错误代码列表.

当一个windows函数检测到一个错误时,它会使用线程本地存储(thread-local storage)机制,将相应的错误代码号码与调用的线程关联起来.这将使线程能够互相独立的运行,而不会影响各自的错误代码.

当函数返回时,它的返回值就能指明是否有错误发生,若有且要确定是什么错误,就需要调用dword getlasterror()函数,它返回线程的32位错误代码.visual studio有一个error lookup程序可用将错误代码的号码换成相应文本描述.windows还提供了一个函数formatmessage可以将错误代码转换成它的文本描述.

dword formatmessage(

dword dwflags, // source and processing options

lpcvoid lpsource, // message source

dword dwmessageid, // message identifier

dword dwlanguageid, // language identifier

lptstr lpbuffer, // message buffer

dword nsize, // maximum size of message buffer

va_list *arguments // array of message inserts

)

我们也可以在自己的函数中使用该机制,只需要使用void setlasterror(dword dwerrcode)函数即可,如果winerror.h中的任何代码都不能正确地反映该错误的性质,那么可以创建你自己的代码。错误代码的域的划分表:

位 31~30 29 28 27~16 15~0

内容 严重性 microsoft/客户 保留 设备代码 异常代码

含义 0=成功 0=ms定义的代码 必顺是0 由ms定义 由ms或客户定义

1=参考

2=警告 1=客户定义的代码

3=错误

注:如果创建自己的错误代码,必顺使29位为1.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11654842.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存