gpt4 book ai didi

c++ - 遗留 C++ Win32 DLL 中的空终止字符串 - 有更好的方法吗?

转载 作者:行者123 更新时间:2023-11-30 00:38:41 29 4
gpt4 key购买 nike

在十多年没有用 C++ 编程之后,我正在尝试向遗留的 C++ Win32 DLL 添加正确的错误报告。

这有力地提醒了我们在 C/C++ 中处理空终止字符串的令人难以置信的单调乏味——更不用说潜在的缓冲区溢出和安全问题了。

我正在考虑使用更高级的字符串库 - 也许是 MFC CString 或 STL 库。

编辑

我们软件的两个旧版本都使用 DLL - 用 C++ 编写;和更新版本 - 用 C# 编写。

编译器是VS2008。

对于第一遍,我记录到标准的 Windows 事件日志,因为将错误消息传回 DLL 客户端将是一个很大的架构变化(当前架构很糟糕,多种故障模式被折叠成一个 bool 值通过/失败返回值一直传递到调用堆栈。不用说,这使问题诊断成为一场噩梦)。但我想在以后改进这一点。

字符串库问题

既然这是一个 DLL,这是个好主意吗?

DLL 是否有任何特殊注意事项?

我应该注意的问题?

就此而言,一个库是否比另一个更好?

空字符串问题

如果我坚持使用空终止符,我应该使用哪组字符串函数? MS 帮助文档不鼓励使用旧的 C 函数(例如 strcat 等)。但是现在似乎有很多很多其他选项可用(例如 _tcscat、_mbscat、wcscat 等)。我应该使用哪个,为什么?

最佳答案

从 DLL 共享任何类型的模板类都是危险的。由于模板位于头文件中,您无法控制程序是否使用与 DLL 相同版本的头文件 - 不匹配会导致 fatal error 。

至于 _tcscat、_mbscat 和 wcscat 之间的区别,您需要为您的 API 确定一个字符集。 _mb 函数使用大部分已过时的多字节字符集,wc 函数使用 wchar_t Unicode。 _t 函数将解析为其中一个,具体取决于您如何设置项目定义。

关于c++ - 遗留 C++ Win32 DLL 中的空终止字符串 - 有更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10219238/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com