小编Blu*_*789的帖子

检查C++中是否只有一个字符串变量不是nullptr

我有三个LPCWSTR字符串变量叫A,B,C.

我从另一个函数中分配它们,nullptr如果出现问题,有时可以返回.像这样:

A = MyFunc();
B = MyFunc();
C = MyFunc();
Run Code Online (Sandbox Code Playgroud)

现在,对于那些带有这些变量的东西,我需要检查这些变量中是否只有一个变量nullptr(只分配了一个变量).

我自己尝试这样做:

if ((A == nullptr) && (B == nullptr) && (C <> nullptr)) {}
Run Code Online (Sandbox Code Playgroud)

有关如何做到这一点的任何想法都是受欢迎的

c++ variables null nullptr

12
推荐指数
3
解决办法
1856
查看次数

在缓冲区溢出时自动截断和空终止字符串缓冲区

我有以下代码,它可以从指定父窗口的所有子窗口加载文本。它工作正常,但有时,有一些父窗口(例如打开的带有很长 C++ 源文件的记事本)具有大量文本并导致缓冲区溢出。

BOOL CALLBACK EnumChildProc(__in HWND hWnd, __in LPARAM lParam) {

    LRESULT TEXT_LENGTH = NULL;
    WCHAR szText[32767];
    LPWSTR szWindowText;
    UINT nBuffer = NULL, nText = NULL;

    szWindowText = reinterpret_cast<LPWSTR>(lParam); szText[0] = L'\0';
    nBuffer = (UINT)wcslen(szWindowText);
    TEXT_LENGTH = SendMessage(hWnd, WM_GETTEXTLENGTH, NULL, NULL);

    if (TEXT_LENGTH > NULL)
    {
        SendMessage(hWnd, WM_GETTEXT, (WPARAM)32767, reinterpret_cast<LPARAM>(&szText));
        szText[TEXT_LENGTH] = L'\n'; szText[TEXT_LENGTH + 1] = L'\0';

        while ((nBuffer < 32766) && (szText[nText] != L'\0'))
        { szWindowText[nBuffer++] = szText[nText++]; }

        szWindowText[nBuffer] = L'\0';
    }
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

该行 …

c++ winapi truncate buffer-overflow

5
推荐指数
1
解决办法
334
查看次数

在Inno Setup Pascal脚本中读取UTF-16文件

我有一个.inf从 Resource Hacker 导出的文件。该文件采用 UTF-16 LE 编码。

EXTRALARGELEGENDSII_INI TEXTFILE "Data.bin"

LARGEFONTSLEGENDSII_INI TEXTFILE "Data_2.bin"

NORMALLEGENDSII_INI TEXTFILE "Data_3.bin"

THEMES_INI TEXTFILE "Data_4.bin" 
Run Code Online (Sandbox Code Playgroud)

当我使用该LoadStringFromFile函数加载它时:

EXTRALARGELEGENDSII_INI TEXTFILE "Data.bin"

LARGEFONTSLEGENDSII_INI TEXTFILE "Data_2.bin"

NORMALLEGENDSII_INI TEXTFILE "Data_3.bin"

THEMES_INI TEXTFILE "Data_4.bin" 
Run Code Online (Sandbox Code Playgroud)

我在调试输出中得到这个:

E
Run Code Online (Sandbox Code Playgroud)

请告诉我如何解决这个问题。

提前致谢。

inno-setup utf-16 pascalscript

4
推荐指数
1
解决办法
2121
查看次数

如何在 Inno Setup 中延迟而不冻结

您好,我想知道如何在 Inno Setup Pascal Script 中将工作(或命令)延迟指定的时间。

内置功能会在Sleep(const Milliseconds: LongInt)睡觉时冻结所有工作。

我实现的以下功能也使WizardForm无响应但不像内置Sleep()功能那样冻结。

procedure SleepEx(const MilliSeconds: LongInt);
begin
  ShellExec('Open', 'Timeout.exe', '/T ' + IntToStr(MilliSeconds div 1000), '', SW_HIDE,
            ewWaitUntilTerminated, ErrorCode);
end;
Run Code Online (Sandbox Code Playgroud)

我也读过这个,但想不出如何在我的函数中使用它。

我想知道如何WaitForSingleObject在此SleepEx功能中使用。

在此先感谢您的帮助。

sleep inno-setup pascalscript

2
推荐指数
1
解决办法
3743
查看次数

在Delphi应用程序中使用Shell_NotifyIcon显示动画托盘图标

我希望我的Delphi应用程序在通知区域中显示动画托盘图标.我也搜索了这个,但我只得到了TTrayIcon我不使用的结果.

我使用Shell_NotifyIcon并无法弄清楚如何在通知区域中设置托盘图标的动画.(TTimer)用于为此设置Animate Interval 的Timer 应该能够随时停止和启动.

问题是我不知道如何TTimer在完成表单的第一次恢复后启动.

我的意思是用户打开我的程序,并将其最小化到系统托盘,它的系统托盘图标动画很好,用户再次出于某种原因恢复它,他再次将其最小化为系统托盘,然后系统托盘图标动画,TTimer应该能够重新开始,不应该像没有Animate的普通系统托盘图标那样显示.

我怎样才能做到这一点?

提前致谢.

delphi system-tray delphi-2010

1
推荐指数
1
解决办法
657
查看次数