gpt4 book ai didi

c++ - C++ 生成器 XE4 上的 AssertErrorProc

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:04 24 4
gpt4 key购买 nike

我正在研究 C++ Builder XE4 上的 AssertErrorProc。找到delphi代码如下。

procedure AssertErrorHandler(
const iMsg, iFilename: String;
const iLineNo: Integer;
const iAddress: Pointer);
var
Err: String;
begin
Err :=
Format(
'%s (%s line %d @ %x)',
[iMsg, iFilename, iLineNo, Integer(iAddress)]);
ShowMessage(Err);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
AssertErrorProc = AssertErrorHandler;
Assert(false);
end;

我试图将上面的代码转换成如下的 C++ 代码。

void __fastcall TForm1::AssertErrorHandler(const String iMsg,
const String iFilename, const int iLineNo,
const void* iAddress)

{
String Err;

Err = Format(L"%s (%s line %d @ %x)",
[iMsg, iFilename, iLineNo, Integer(iAddress)]); // E2188
ShowMessage(Err);

}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
AssertErrorProc = AssertErrorHandler; // E2235, E2268
Assert(false);
}

我在编译代码时收到两个错误。

  1. 在 Format() 语句 (E2188)

  2. 在分配 AssertErrorHandler (E2235, E2268) 时

我很感激我应该修改代码的任何信息。

最佳答案

以上方法仅在 Delphi 中可用,在 C++ 中,您应该将自定义断言定义为宏:

#ifdef _DEBUG
#undef assert
#define assert(condition) if(!condition) assertHandler(__FILE__, __LINE__, __FUNCTION__, #condition);
#endif

void assertHandler(const char *fileName, int line, const char *function,
const char *condition)
{
char message[255];
wsprintfA(message, "Assertion failed at %s line %d inside %s condition: %s",
fileName, line, function, condition);
ShowMessage(message);
abort();
}

用法:

assert(myVar > 0);

关于c++ - C++ 生成器 XE4 上的 AssertErrorProc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782147/

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