具有字符串输出参数的WinAPI函数有多少一致性?

彼得·鲁斯特

我最近开始在Windows上用C编写代码,并一直在尝试处理字符串缓冲区的不同方式。举例来说,GetWindowText()需要一个int nMaxCount字符的最大数量,包括空的。GetModuleFileName()占用DWORD nSize缓冲区的大小,以TCHARs为单位(我假设这也包括null)。即使这些词的措词不同,一个人花了DWORD一段时间,而另一个人花了一个int(为什么类型不同?),但行为是相同的,正确吗?

两者都返回复制的字符串的长度,包括null,因此我应该能够重复调用它们中的任何一个,将缓冲区大小加倍,直到返回的长度小于传入的缓冲区大小为止,如下所示:

DWORD buf_size = 1024;
DWORD return_val;
wchar_t *full_path = malloc(buf_size * sizeof(wchar_t));

// double the buffer until it's big enough
while ((return_val = GetModuleFileNameW(NULL, full_path, buf_size)) == buf_size) {
    buf_size *= 2;
    full_path = realloc(full_path, buf_size * sizeof(wchar_t));
}

if (!return_val) {
    fprintf(stderr, "Error in GetModuleFileNameW()\n");
    return NULL;
}

具有字符串[out]参数的所有Windows API函数是否都以相同的方式工作?是否有个别功能或功能组的行为有所不同?(例如,使用缓冲区大小而不是字符的字节大小,或者包含空字符的最大字符串长度,或者返回不同于这两个值的函数)

实际上,我只是注意到两者的返回值并不完全一致:出错时GetModuleFileName()返回0每当窗口文本有一个空字符串时,GetWindowText()它将返回0,我想我在枚举窗口时经常看到...

我想详细了解它的一个原因是,在某些情况下(GetModuleFileName()例如,在WinXP上),我的代码中的错误代码将导致字符串不以null终止。

戴维·赫弗南

基本上,大多数返回字符串的Win32 API函数都以一致的方式执行此操作。GetWindowText对于规范的此类功能是一个不错的选择。但是,也有例外,我认为没有人编写过全面的清单。

最重要的是,每次编写代码调用Win32 API函数时,都需要仔细查阅文档。不仅涉及字符串输出值的处理,而且涉及所有参数。以及所有返回值。和错误处理。整个API的样式都有差异,甚至相关功能组之间也有差异。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有字符串输出参数的WinAPI函数有多少一致性?

来自分类Dev

在保留字符串一致性的同时删除所有符号

来自分类Dev

在具有获取一致性与宽松一致性的原子负载上旋转

来自分类Dev

MySQL复制是否具有即时数据一致性?

来自分类Dev

具有多个属性的SQL排序(按一致性排序)

来自分类Dev

不同代码的SQL插入价格具有更好的一致性

来自分类Dev

通过其键获取实体是否具有强一致性?

来自分类Dev

尽管具有复制因子3的QUORUM一致性级别,Cassandra还是不一致的

来自分类Dev

MS Access VBA-从字段中的半一致性数据中提取部分字符串

来自分类Dev

获得两个字符串之间的最高一致性

来自分类Dev

是否可以运行具有高度一致性的Neo4j群集?

来自分类Dev

具有一致性级别和复制因子的Cassandra如何处理CAP定理?

来自分类Dev

为什么PW = all和PR = all在Riak中不具有很强的一致性?

来自分类Dev

导入外部库后,具有UINavigationControllerDelegate的ViewControllers中出现冗余一致性错误

来自分类Dev

功能值参数的一致性的特性?

来自分类Dev

具有HTML字符串的表格单元格不一致地呈现为多行

来自分类Dev

有关一致性哈希的一些后续问题

来自分类Dev

有关一致性哈希的一些后续问题

来自分类Dev

具有JSON函数的字符串

来自分类Dev

Hazelcast:有关多节点一致性的问题

来自分类Dev

是否有关于不可解释功能的理论(一致性分析)?

来自分类Dev

是否有可能强加GAE数据存储区的一致性?

来自分类Dev

Memcache一致性哈希,集群,PHP代码,Ketama及其所有

来自分类Dev

OpenMP刷新和所有线程的一致性

来自分类Dev

如何使一致性完全分布(没有本地缓存)

来自分类Dev

Cassandra 写入一致性级别所有说明

来自分类Dev

替换Java中字符串中所有不一致的字符

来自分类Dev

替换Java中字符串中所有不一致的字符

来自分类Dev

如果我们将内存标记为WC(写入合并),那么我们是否自动具有一致性?

Related 相关文章

  1. 1

    具有字符串输出参数的WinAPI函数有多少一致性?

  2. 2

    在保留字符串一致性的同时删除所有符号

  3. 3

    在具有获取一致性与宽松一致性的原子负载上旋转

  4. 4

    MySQL复制是否具有即时数据一致性?

  5. 5

    具有多个属性的SQL排序(按一致性排序)

  6. 6

    不同代码的SQL插入价格具有更好的一致性

  7. 7

    通过其键获取实体是否具有强一致性?

  8. 8

    尽管具有复制因子3的QUORUM一致性级别,Cassandra还是不一致的

  9. 9

    MS Access VBA-从字段中的半一致性数据中提取部分字符串

  10. 10

    获得两个字符串之间的最高一致性

  11. 11

    是否可以运行具有高度一致性的Neo4j群集?

  12. 12

    具有一致性级别和复制因子的Cassandra如何处理CAP定理?

  13. 13

    为什么PW = all和PR = all在Riak中不具有很强的一致性?

  14. 14

    导入外部库后,具有UINavigationControllerDelegate的ViewControllers中出现冗余一致性错误

  15. 15

    功能值参数的一致性的特性?

  16. 16

    具有HTML字符串的表格单元格不一致地呈现为多行

  17. 17

    有关一致性哈希的一些后续问题

  18. 18

    有关一致性哈希的一些后续问题

  19. 19

    具有JSON函数的字符串

  20. 20

    Hazelcast:有关多节点一致性的问题

  21. 21

    是否有关于不可解释功能的理论(一致性分析)?

  22. 22

    是否有可能强加GAE数据存储区的一致性?

  23. 23

    Memcache一致性哈希,集群,PHP代码,Ketama及其所有

  24. 24

    OpenMP刷新和所有线程的一致性

  25. 25

    如何使一致性完全分布(没有本地缓存)

  26. 26

    Cassandra 写入一致性级别所有说明

  27. 27

    替换Java中字符串中所有不一致的字符

  28. 28

    替换Java中字符串中所有不一致的字符

  29. 29

    如果我们将内存标记为WC(写入合并),那么我们是否自动具有一致性?

热门标签

归档