fryptus 2022-11-06 12:02 采纳率: 50%
浏览 24

Windows发生生成错误

Bwindows.h部分代码:

//////////////////////////////////////////////////////////////////////////
// Bwindows.h 包含了编写 Windows 程序所必须的头文件,
//            一些常用自定义函数的声明、类型、常数、类的定义
//   类包括:
//         CBHashLK:   长整数型 key 的哈希表类
//        CBArrLink:  高效数组链表类
//         CHeapMemory:用全局对象维护所有通过 new 分配的内存指针类
//      CBApp 类:   管理应用程序全局信息
//
// 包含本 h 文件即可使用全局对象指针:pApp(->)获得程序全局信息,但只有
//   同时包含 BForm 的模块(封装 WinMain 函数)后才能获得正确的信息
//
// 包含本 h 文件即可使用全局对象:HM 管理以 new 开辟的内存指针
//    调用 HM.AddPtr(p, bArrNew); 添加管理一个以 new 开辟的内存指针
//    调用 HM.Free(p); 释放 HM 管理的一个动态内存
//    调用 HM.Dispose(); 释放目前管理的所有动态内存(程序结束时也会自动释放)
//////////////////////////////////////////////////////////////////////////

#pragma once
#pragma warning(disable:4996) // 关闭 warning C4996: 如 'wcscpy': This function or variable may be unsafe. Consider using wcscpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

#define OEMRESOURCE        // to use any of the OBM_ constants
#include <windows.h>
#include <memory.h>    
#include <tchar.h>
#include <string.h>
#include <string>
typedef std::basic_string<TCHAR, std::char_traits<TCHAR>, std::allocator<TCHAR> > tstring;
using std::string;
using std::wstring;

// EventsGenerator 函数返回此值表示要调用默认的窗口程序,否则不再调用默认的窗口程序
#define gc_APICEventsGenDefautRet 0xFEEEEEEE  

enum EStandardIcon        // 系统图标
{
    IDI_Application = (int)IDI_APPLICATION, 
    IDI_Asterisk = (int)IDI_ASTERISK, 
    IDI_Error = (int)IDI_ERROR, 
    IDI_Exclamation = (int)IDI_EXCLAMATION, 
    IDI_Hand = (int)IDI_HAND, 
    IDI_Information = (int)IDI_INFORMATION, 
    IDI_Question = (int)IDI_QUESTION, 
    IDI_Warning = (int)IDI_WARNING, 
    IDI_Winlogo = (int)IDI_WINLOGO
};

#define gc_IDStandCursorIDBase 0x10000  
enum EStandardCursor    // 系统鼠标指针形状,为对应 API 常量 + gc_IDStandCursorIDBase(目的是为与资源 ID 区分,资源 ID 均小于 gc_IDStandCursorIDBase)
{
    IDC_AppStarting    =    (int)IDC_APPSTARTING + gc_IDStandCursorIDBase,         // Standard arrow and small hourglass 
    IDC_Arrow    =    (int)IDC_ARROW + gc_IDStandCursorIDBase,                 // Standard arrow 
    IDC_Cross    =    (int)IDC_CROSS + gc_IDStandCursorIDBase,                 // Cross hair 
    IDC_Hand    =    (int)MAKEINTRESOURCE(32649) + gc_IDStandCursorIDBase,    // Windows NT 5.0 and later: Hand 
    IDC_Help    =    (int)IDC_HELP + gc_IDStandCursorIDBase,                 // Arrow and question mark 
    IDC_IBeam    =    (int)IDC_IBEAM + gc_IDStandCursorIDBase,                 // I-beam 
    IDC_Icon    =    (int)IDC_ICON + gc_IDStandCursorIDBase,                 // Obsolete for applications marked version 4.0 or later. 
    IDC_No    =    (int)IDC_NO + gc_IDStandCursorIDBase,                         // Slashed circle 
    IDC_Size    =    (int)IDC_SIZE + gc_IDStandCursorIDBase,                 // Obsolete for applications marked version 4.0 or later. Use IDC_SIZEALL. 
    IDC_SizeAll    =    (int)IDC_SIZEALL + gc_IDStandCursorIDBase,                 // Four-pointed arrow pointing north, south, east, and west 
    IDC_SizeNESW    =    (int)IDC_SIZENESW + gc_IDStandCursorIDBase,         // Double-pointed arrow pointing northeast and southwest 
    IDC_SizeNS    =    (int)IDC_SIZENS + gc_IDStandCursorIDBase,                 // Double-pointed arrow pointing north and south 
    IDC_SizeNWSE    =    (int)IDC_SIZENWSE + gc_IDStandCursorIDBase,         // Double-pointed arrow pointing northwest and southeast 
    IDC_SizeWE    =    (int)IDC_SIZEWE + gc_IDStandCursorIDBase,                 // Double-pointed arrow pointing west and east 
    IDC_UpArrow    =    (int)IDC_UPARROW + gc_IDStandCursorIDBase,                 // Vertical arrow 
    IDC_Wait    =    (int)IDC_WAIT + gc_IDStandCursorIDBase                     // Hourglass 
};

enum EOEMBmp        // 系统 OEM 位图
{
    Obm_Btncorners = OBM_BTNCORNERS, 
    Obm_Btsize = OBM_BTSIZE, 
    Obm_Check = OBM_CHECK, 
    Obm_Checkboxes = OBM_CHECKBOXES, 
    Obm_Close = OBM_CLOSE, 
    Obm_Reduce = OBM_REDUCE, 
    Obm_Combo = OBM_COMBO, 
    Obm_Reduced = OBM_REDUCED, 
    Obm_Dnarrow = OBM_DNARROW, 
    Obm_Restore = OBM_RESTORE, 
    Obm_Dnarrowd = OBM_DNARROWD, 
    Obm_Restored = OBM_RESTORED, 
    Obm_Dnarrowi = OBM_DNARROWI, 
    Obm_Rgarrow = OBM_RGARROW, 
    Obm_Lfarrow = OBM_LFARROW, 
    Obm_Rgarrowd = OBM_RGARROWD, 
    Obm_Lfarrowd = OBM_LFARROWD, 
    Obm_Rgarrowi = OBM_RGARROWI, 
    Obm_Lfarrowi = OBM_LFARROWI, 
    Obm_Size = OBM_SIZE, 
    Obm_Mnarrow = OBM_MNARROW, 
    Obm_Uparrow = OBM_UPARROW, 
    Obm_Uparrowd = OBM_UPARROWD, 
//     Obm_Old_Restore = OBM_OLD_RESTORE,        // Bitmap names that begin with OBM_OLD represent bitmaps used by 16-bit versions of Windows earlier than 3.0. 
//     Obm_Old_Rgarrow = OBM_OLD_RGARROW, 
//     Obm_Old_Uparrow = OBM_OLD_UPARROW, 
//     Obm_Old_Zoom = OBM_OLD_ZOOM, 
//     Obm_Old_Close = OBM_OLD_CLOSE, 
//     Obm_Old_Dnarrow = OBM_OLD_DNARROW, 
//     Obm_Old_Lfarrow = OBM_OLD_LFARROW, 
//     Obm_Old_Reduce = OBM_OLD_REDUCE, 
    Obm_Uparrowi = OBM_UPARROWI, 
    Obm_Zoom = OBM_ZOOM, 
    Obm_Zoomd = OBM_ZOOMD
};

enum EOEMIcon        // 系统 OEM 图标
{
    Oic_Sample  =    OIC_SAMPLE,    
    Oic_Hand  =    OIC_HAND,    
    Oic_Ques  =    OIC_QUES,    
    Oic_Bang  =    OIC_BANG,    
    Oic_Note  =    OIC_NOTE,

#if(WINVER >= 0x0400)    
    Oic_Winlogo  =    OIC_WINLOGO,
    Oic_Warning  =    OIC_WARNING,    
    Oic_Error  =    OIC_ERROR,    
    Oic_Information  =    OIC_INFORMATION,
#endif     /* WINVER >= 0x0400 */
};

enum EOEMCursor        // 系统 OEM 光标
{
    Ocr_Normal  =    OCR_NORMAL,    
    Ocr_Ibeam  =    OCR_IBEAM,
    Ocr_Wait  =    OCR_WAIT,    
    Ocr_Cross  =    OCR_CROSS,    
    Ocr_Up  =    OCR_UP,    
    Ocr_Size  =    OCR_SIZE,    /* OBSOLETE: use OCR_SIZEALL */
    Ocr_Icon  =    OCR_ICON,    /* OBSOLETE: use OCR_NORMAL */
    Ocr_Sizenwse  =    OCR_SIZENWSE,    
    Ocr_Sizenesw  =    OCR_SIZENESW,    
    Ocr_Sizewe  =    OCR_SIZEWE,    
    Ocr_Sizens  =    OCR_SIZENS,    
    Ocr_Sizeall  =    OCR_SIZEALL,    
    Ocr_Icocur  =    OCR_ICOCUR,    /* OBSOLETE: use OIC_WINLOGO */
    Ocr_No  =    OCR_NO,    

#if(WINVER >= 0x0500)    
    Ocr_Hand  =    OCR_HAND,    
#endif     /* WINVER >= 0x0500 */

#if(WINVER >= 0x0400)    
    Ocr_Appstarting  =    OCR_APPSTARTING,    
#endif     /* WINVER >= 0x0400 */
};

enum EColorType            // 系统颜色
{
    COLOR_ActiveBorder    =    COLOR_ACTIVEBORDER,
    COLOR_ActiveCaption    =    COLOR_ACTIVECAPTION,
    COLOR_AppWorkspace    =    COLOR_APPWORKSPACE,
    COLOR_BackGround    =    COLOR_BACKGROUND,
    COLOR_BtnFace    =    COLOR_BTNFACE,
    COLOR_BtnShadow    =    COLOR_BTNSHADOW,
    COLOR_BtnText    =    COLOR_BTNTEXT,
    COLOR_CaptionText    =    COLOR_CAPTIONTEXT,
    COLOR_GrayText    =    COLOR_GRAYTEXT,
    COLOR_Highlight    =    COLOR_HIGHLIGHT,
    COLOR_HighlightText    =    COLOR_HIGHLIGHTTEXT,
    COLOR_InactiveBorder    =    COLOR_INACTIVEBORDER,
    COLOR_InactiveCaption    =    COLOR_INACTIVECAPTION,
    COLOR_Menu    =    COLOR_MENU,
    COLOR_MenuText    =    COLOR_MENUTEXT,
    COLOR_ScrollBar    =    COLOR_SCROLLBAR,
    COLOR_Window    =    COLOR_WINDOW,
    COLOR_WindowFrame    =    COLOR_WINDOWFRAME,
    COLOR_WindowText     =    COLOR_WINDOWTEXT 
};

enum EShowWindowCmd        // 窗口显示状态
{
    SW_ForceMinimize = SW_FORCEMINIMIZE,    //  Windows NT 5.0 and later: Minimizes a window, even if the thread that owns the window is hung. This flag should only be used when minimizing windows from a different thread. 
    SW_Hide = SW_HIDE,    //  Hides the window and activates another window. 
    SW_Mazimize = SW_MAXIMIZE,    //  Maximizes the specified window. 
    SW_Minimize = SW_MINIMIZE,    //  Minimizes the specified window and activates the next top-level window in the Z order. 
    SW_Restore = SW_RESTORE,    //  Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window. 
    SW_Show = SW_SHOW,    //  Activates the window and displays it in its current size and position.  
    SW_ShowDefault = SW_SHOWDEFAULT,    //  Sets the show state based on the SW_ flag specified in theSTARTUPINFO structure passed to theCreateProcess function by the program that started the application.  
    SW_ShowMaximized = SW_SHOWMAXIMIZED,    //  Activates the window and displays it as a maximized window. 
    SW_ShowMinimized = SW_SHOWMINIMIZED,    //  Activates the window and displays it as a minimized window. 
    SW_ShowMinNoactive = SW_SHOWMINNOACTIVE,    //  Displays the window as a minimized window. The active window remains active. 
    SW_ShowNA = SW_SHOWNA,    //  Displays the window in its current state. The active window remains active. 
    SW_ShowNoActivate = SW_SHOWNOACTIVATE,    //  Displays a window in its most recent size and position. The active window remains active. 
    SW_ShowNormal = SW_SHOWNORMAL    //  Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time. 
};


enum EMsgBoxBtn            // 用于消息框的按钮样式
{
    mb_OK = MB_OK,
    mb_OkCancel = MB_OKCANCEL,
    mb_AbortRetryIgnore = MB_ABORTRETRYIGNORE,
    mb_YesNoCancel = MB_YESNOCANCEL,
    mb_YesNo = MB_YESNO,
    mb_RetryCancel = MB_RETRYCANCEL
};

enum EMsgBoxIcon        // 用于消息框的图标样式
{
    mb_IconNone = 0,
    mb_IconError = MB_ICONHAND,
    mb_IconQuestion = MB_ICONQUESTION, 
    mb_IconExclamation = MB_ICONEXCLAMATION, 
    mb_IconInformation = MB_ICONASTERISK 
    #if(WINVER >= 0x0400)
    ,mb_UserIcon = MB_USERICON
    #endif /* WINVER >= 0x0400 */
};

enum EDlgBoxDefBtn        // 用于消息框的默认按钮样式
{
        mb_DefButton1 = MB_DEFBUTTON1,
        mb_DefButton2 = MB_DEFBUTTON2,
        mb_DefButton3 = MB_DEFBUTTON3
#if(WINVER >= 0x0400)
        ,mb_DefButton4 = MB_DEFBUTTON4
#endif /* WINVER >= 0x0400 */
};

enum EDlgBoxCmdID        //用于消息框的用户按下的按钮种类
{
    NoValue = 0,
    idAbort = IDABORT,         // Abort button was selected. 
    idCancel = IDCANCEL,     // Cancel button was selected. 
    idIgnore = IDIGNORE,     // Ignore button was selected. 
    idNo = IDNO,             // No button was selected. 
    idOk = IDOK,             // OK button was selected. 
    idRetry = IDRETRY,         // Retry button was selected. 
    idYes = IDYES             // Yes button was selected. 
};


enum EMsgBeep        // 系统声音的样式
{
    mb_SoundOK = MB_OK,    // SystemDefault
    mb_SoundError = MB_ICONHAND,
    mb_SoundQuestion = MB_ICONQUESTION, 
    mb_SoundExclamation = MB_ICONEXCLAMATION, 
    mb_SoundAsterisk = MB_ICONASTERISK, 
    mb_SoundSpeaker = 0xFFFFFFFF        // Standard beep using the computer speaker
};

enum ESysMenu        // 系统菜单项
{
    eSysMenu_Close = SC_CLOSE,
    eSysMenu_Minimize = SC_MINIMIZE,
    eSysMenu_Maxmize = SC_MAXIMIZE,
    eSysMenu_Move = SC_MOVE,
    eSysMenu_Size = SC_SIZE,
    eSysMenu_Restore = SC_RESTORE
};




//////////////////////////////////////////////////////////////////////////
// 常用自定义函数
//
//////////////////////////////////////////////////////////////////////////

// 弹出消息框
//   如 title 为 NULL,就自动使用应用程序名作为 title
EDlgBoxCmdID MsgBox(LPCTSTR            szPrompt, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(char            valueChar, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(unsigned short int valueInt,                // TCHAR
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(int                valueInt, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(long            valueLong, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(unsigned int    valueInt, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(unsigned long    valueInt, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(float            valueSng, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(double            valueDbl, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(long double        valueDbl, 
                     LPCTSTR            szTitle = NULL,                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);
EDlgBoxCmdID MsgBox(tstring            valueString, 
                     tstring            valueTitle = TEXT(""),                
                    EMsgBoxBtn        buttons = mb_OK, 
                    EMsgBoxIcon        icon = mb_IconNone, 
                    EDlgBoxDefBtn    defBtn = mb_DefButton1, 
                    bool            bTopMost = true, 
                    bool            bHelpButton = false, 
                    bool            bRightJustified = false, 
                    bool            bRightToLeftReading = false);

BOOL MsgBeep(EMsgBeep soundStyle = mb_SoundSpeaker);

// 将一个整数转换为八进制的字符串,字符串空间自动开辟、由 HM 自动管理
LPTSTR Oct(long number);

// 将一个整数转换为十六进制的字符串,字符串空间自动开辟、由 HM 自动管理
LPTSTR Hex(long number);


// 获得当前路径字符串,字符串空间自动开辟、由 HM 自动管理
LPTSTR CurDir();

// 获取一个自定义资源的字节数据(空间自动开辟、由 HM 自动管理)
//   rSize 不为0时,将从此参数指向的空间返回资源的字节数
unsigned char * LoadResData(UINT idRes, UINT typeRes, unsigned long * rSize=0);
unsigned char * LoadResData(UINT idRes, LPCTSTR typeRes, unsigned long * rSize=0 );
unsigned char * LoadResData(LPCTSTR idRes, UINT typeRes, unsigned long * rSize=0 );
unsigned char * LoadResData(LPCTSTR idRes, LPCTSTR typeRes, unsigned long * rSize=0);

//////////////////////////////////////////////////////////////////////////
// 时间 函数
//////////////////////////////////////////////////////////////////////////

// 返回当前系统日期、时间的一个字符串,字符串空间自动开辟、由 HM 自动管理
//   若 lpDblTime 不为0,还将当前系统日期、时间转换为 double 
//     (为1601-1-1以来经历的毫秒数)存入它指向的 double 型变量中
//   若 lpTime 不为0,还将当前系统日期、时间存储到它指向的结构中
LPTSTR Now( double *lpDblTime=0, SYSTEMTIME *lpTime=0);

// 设置当前系统日期、时间
BOOL NowSet( SYSTEMTIME stNow );

// 将一个日期、时间转换为 double 返回(为1601-1-1以来经历的毫秒数)
double DateTimeDbl( SYSTEMTIME stDatetime );

// 计算两个日期、时间的时间间隔时所用的间隔类型
enum eDataTimeDiffStyle
{
    edtYearDiff = 1,
    edtMonthDiff,
    edtDayDiff,
    edtHourDiff,
    edtMinuteDiff,
    edtSecondDiff,
    edtMilliseconds
};

// 计算两个日期、时间的时间间隔
// style 为指定时间间隔的单位
double DateDiff(eDataTimeDiffStyle style,
                SYSTEMTIME stDatetime1,
                SYSTEMTIME stDatetime2);


// 返回从 1970-1-1 00:00 经过的秒数
// 若参数 blClockTicks==True,则返回本进程经过的 clock ticks 数
long TimeClock( bool blClockTicks=false );


//////////////////////////////////////////////////////////////////////////
// 自定义字符串 函数
//////////////////////////////////////////////////////////////////////////

// 以 printf 方式制作一个字符串(字符串空间自动开辟、由 HM 自动管理)
LPTSTR cdecl StrPrintf( LPCTSTR szFormat, ... );


// 取字符串的前 length 个字符组成新字符串,函数返回新字符串的首地址
//  (使用Unicode时1个汉字算1个长度,使用ANSI时1个汉字算2个长度)
// 新字符串空间自动开辟、由 HM 自动管理
// length超过字符串长度时返回整个字符串,length<=0 时返回 指向 "\0" (空串)的指针
LPTSTR Left(LPCTSTR szStringSrc, int length);        


// 取字符串的后 length 个字符组成新字符串,函数返回新字符串的首地址
//  (使用Unicode时1个汉字算1个长度,使用ANSI时1个汉字算2个长度)
// 新字符串空间自动开辟、由 HM 自动管理
// length超过字符串长度时返回整个字符串,length<=0 时返回 指向 "\0" (空串)的指针
LPTSTR Right(LPCTSTR szStringSrc, int length);                


// 取字符串的从第 startPos 个字符起,长 length 个字符组成的字符串,
//   函数返回新字符串的首地址
//  (第一个字符位置为1,使用Unicode时1个汉字算1个长度,
//   使用ANSI时1个汉字算2个长度)
// 新字符串空间自动开辟、由 HM 自动管理
// startPos+length-1 超过字符串长度时返回整个字符串,length<=0//     或 startPos<=0 或 startPos>源字符串长度 时返回指向 "\0" (空串)的指针
LPTSTR Mid(LPCTSTR szStringSrc, int startPos, int length);    


// 删除字符串的前导、尾部和所有空格,返回删除后的新字符串,
//   新字符串空间自动开辟、由 HM 自动管理
// bDelOtherSpace=true 时删除所有空格在内的 isspace() 返回真的
//   所有字符;bDelOtherSpace=false 时只删除空格
LPTSTR LTrim(LPCTSTR szStringSrc, bool bDelOtherSpace=false);
LPTSTR RTrim(LPCTSTR szStringSrc, bool bDelOtherSpace=false);
LPTSTR Trim(LPCTSTR szStringSrc, bool bDelOtherSpace=false);

// 将字符串中的字母全部转换为大写(UCase)、小写(LCase)
//   返回转换后的新字符串,新字符串空间自动开辟、由 HM 自动管理
LPTSTR LCase(LPCTSTR szStringSrc);
LPTSTR UCase(LPCTSTR szStringSrc);


enum eBStrCompareMethod        // 字符串比较方式
{
    bcmBinaryCompare = 0,    // 二进制比较(区分大小写)
    bcmTextCompare = 1        // 文本比较(不区分大小写)
};


// 在 szSrc 中,从第 start 个字符开始(第一个字符位置为1),
//      查找字符串 szFind 的第一次出现的位置(第一个字符位置为1),
//    找到返回值>0,没找到返回0
//  说明:本函数未调用任何库函数(strlen也未调用),提高了运行效率
int InStr(int            start,                                        
          LPCTSTR        szSrc, 
          LPCTSTR        szFind,
    eBStrCompareMethod    compare=bcmBinaryCompare);


// 在 szSrc 中,从第 1 个字符开始,查找字符串 szFind 的
//   第一次出现的位置(第一个字符位置为1),
//   返回位置号(第一个字符位置为1)。找到返回值>0,没找到返回0
int InStr(LPCTSTR        szSrc,                                
          LPCTSTR        szFind,
    eBStrCompareMethod    compare=bcmBinaryCompare);


// 在 szSrc 中,从第 start 个字符开始(第一个字符位置为1)到末尾的部分,
//      查找字符串 szFind 的倒数第一次出现的位置(第一个字符位置为1),
//    找到返回值>0,没找到返回0
//  说明:本函数未调用任何库函数(strlen也未调用),提高了运行效率
int InStrRev(LPCTSTR        szSrc, 
             LPCTSTR        szFind, 
             int            start=1,
             eBStrCompareMethod    compare=bcmTextCompare);


// 按分隔字符串 delimiters ,分割一个字符串,生成若干子字符串
//     各 子字符串 的地址由 ptrStrings[] 数组返回,函数返回子字符串的个数
//   ptrStrings[] 数组下标从1开始,最大到函数返回值
// delimiters 为分隔符字符串,省略或为 "" 时使用:空格
// limit 限制返回子字符串的最大个数,为 -1 时不限制,将返回所有字符串
//   子字符串内存及 ptrStrings[] 数组内存都自动分配、自动管理
// iPtrArrExpandPer 为各字段的指针数组 每次动态扩大的大小,应估计字段
//   个数来设置以提高效率
//
// 连续调用 Split,第二次及以后调用并传递上次的 ptrStrings 参数时,
//   本函数将自动 free 前一次的 ptrStrings 参数的指针数组的空间,
//   及指针数组的各元素所指空间
//
// 用法举例:================================
//     TCHAR ** s;
//     int n,i;
//     n=Split(TEXT("a,bc, d,efg, 123"), s, TEXT(","));
//     for (i=1;i<=n;i++)
//         MsgBox(s[i]);
// ================================================================
int Split(LPCTSTR        stringSrc,                
          TCHAR        ** &ptrStrings,                
          LPCTSTR        delimiters=NULL,            
          int            limit=-1,                
    eBStrCompareMethod  compare=bcmBinaryCompare, 
          int iPtrArrExpandPer = 200);                        



// 以 delimiter 连接多个字符串,返回连接好的字符串
// 多个字符串的地址由数组 stringSrcArray[] 给出,本函数将连接
//   数组中从下标 arrayIndexStart 到 arrayIndexEnd 的字符串
// delimiter 为 0 时,默认以 "\0" 连接字符串;否则以字符串 delimiter 连接
// bTailDoubleNull 若为 true,则在结果字符串的最后再加一个'\0'(即最后有两个'\0'// 结果字符串的内存自动分配、由 HM 自动管理
LPTSTR Join(TCHAR * stringSrcArray[], 
            const int    arrayIndexEnd, 
            LPCTSTR delimiter=0, 
            const int    arrayIndexStart=1, 
            const bool   bTailDoubleNull=false);


// 替换字符串,返回替换后的字符串
// 替换后的字符串空间自动分配、由 HM 自动管理
LPTSTR Replace(LPCTSTR szStringSrc,        // 要被替换的字符串
               LPCTSTR szFind,            // 要被替换掉的子字符串
               LPCTSTR szReplaceWith,    // 要替换为的内容
               int start=1,            // 在 szStringSrc 中子字符串搜索的开始位置
               int countLimit=-1,    // 子字符串进行替换的次数。–1 表明进行所有可能的替换
               eBStrCompareMethod  compare=bcmBinaryCompare    // 判别子字符串时所用的比较方式
               );


// 连接字符串,生成连接后的长字符串
// 返回连接好的字符串的首地址,自动分配结果字符串的空间、由 HM 自动管理
// 每次调用可最多连接9个字符串
LPTSTR StrAppend(LPCTSTR str1=0, 
                 LPCTSTR str2=0, 
                 LPCTSTR str3=0, 
                 LPCTSTR str4=0, 
                 LPCTSTR str5=0, 
                 LPCTSTR str6=0, 
                 LPCTSTR str7=0,
                 LPCTSTR str8=0,
                 LPCTSTR str9=0 );


// 将 ANSI 或 UTF8 字符串转换为 Unicode,返回结果字符串首地址
//   参数 bToUTF8orANSI 为 false 时转换 ANSI,为 true 时转换 UTF8
//   结果字符串的内存自动分配、由 HM 自动管理
LPWSTR StrConvUnicode(const char * szAnsi, bool bFromUTF8orANSI=false );   // LPWSTR 就是 unsigned short int *


// 将 Unicode 字符串转换为 ANSI 或 UTF8,返回结果字符串首地址
//   参数 bToUTF8orANSI 为 false 时转换为 ANSI,为 true 时转换为 UTF8
//   结果字符串的内存自动分配、由 HM 自动管理
char * StrConvFromUnicode(LPCWSTR szUnicode, bool bToUTF8orANSI=false );


// 将字符串转换为 double 型数值
double Val( LPCWSTR stringVal );    // 转换 Unicode 字符串
double Val( LPCSTR stringVal );        // 转换 ANSI 字符串


报错信息
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/994154807766120.png "#left")
  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-11-06 12:11
    关注

    错误提示在BWindows.h的66行 ,你贴出来的是cpp文件
    错误是将LPWSTR变量传递给了int类型参数了

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 11月6日
  • 创建了问题 11月6日

悬赏问题

  • ¥20 基于MATLAB的TDOA
  • ¥15 为啥输入字体突然变了
  • ¥20 已知坐标,换成MATLAB可以用的数据
  • ¥50 写segy数据text时出错
  • ¥15 这个python五子棋代码的每一句意思是什么啊
  • ¥15 求一段隐藏代码,隐藏一些内容
  • ¥15 汇川EASY521plc电子凸轮
  • ¥15 C++ 如何判断设置快捷键来实现隐藏/显示窗口
  • ¥15 关于#材料工程#的问题:有没有具有电子阻挡层和空穴阻挡层的电池仿真silvaco代码例子或者其他器件具有阻挡层例子的silvaco代码(最好还有相关文献)
  • ¥60 基于MATLAB的TAOD算法