从 C 转换为 C++避免<strsafe.h>

Conversion from C to C++ avoiding <strsafe.h>

本文关键字:lt gt strsafe 避免 转换 C++      更新时间:2023-10-16

最近我在S.O.上读到一篇文章,声称有解决方案可以在文件执行后删除文件,并提供了一些代码。

然后我发现它是用C写的,并使用了一个名为strsafe.h的库,我在其他一些论坛上读过,这是一个可视化库,它不能在c++上工作。

在c++中使用此代码是否有一个有效的解决方案?如有任何帮助,不胜感激。

#include <Windows.h>
#include <strsafe.h>
#define SELF_REMOVE_STRING  TEXT("cmd.exe /C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del "%s"")
void DelMe()
{
    TCHAR szModuleName[MAX_PATH];
    TCHAR szCmd[2 * MAX_PATH];
    STARTUPINFO si = {0};
    PROCESS_INFORMATION pi = {0};
    GetModuleFileName(NULL, szModuleName, MAX_PATH);
    StringCbPrintf(szCmd, 2 * MAX_PATH, SELF_REMOVE_STRING, szModuleName);
    CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
}
void main()
{
    /* Do what you need */
    /* Call this function at the very end of your program to delete itself */
    DelMe();
}

这里<strsafe.h>的唯一函数是StringCbPrintf,您可以将其替换为wsprintf

//StringCbPrintf(szCmd, 2 * MAX_PATH, SELF_REMOVE_STRING, szModuleName);
wsprintf(szCmd, SELF_REMOVE_STRING, szModuleName);

但是,由于使用了Windows本地功能,您将无法将其轻松移植到其他平台。