AssertErrorProc on C++ builder XE4
AssertErrorProc on C++ builder XE4
我正在C++ Builder XE4上研究AssertErrorProc。我找到了德尔菲代码如下。
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);
}
我在编译代码时收到两个错误。
at Format() 语句 (E2188)
在分配断言错误处理程序时(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);
相关文章:
- TDateTime格式在C++Builder中不会更改
- C++Builder中的OnClick事件签名存在问题
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 是否允许调用方对我的 Builder 类使用任何指针类型(包括智能指针)?
- 在 C++ Builder 中使用 NULL 构造 DynamicArray
- Implementing Active Directory with C++ Builder
- BEGIN_MESSAGE_MAP导致C++Builder 10.1崩溃到桌面
- 函数模板"Builder"
- 使用 C++Builder 项目读取字符串中的文件时出错
- 如何在 c++builder 中使用 IDE 管理的组件编写for_each循环
- 如何确保Win-Builder用C 11构建我的包裹
- C++BUILDER OnVirtualKeyboardShown和OnVirtualKeyboard Hidden从另
- Borland C++Builder 6 Strings操作太慢
- 事件处理程序是Embarcadero C++Builder中的重入程序吗
- C++ Builder 10.2: Thread blocks WaitForInputIdle
- LLVM builder::GetInsertBlock,这个函数的目的是什么?
- 如何在 embarcadero C++ builder 中设置编译器
- Borland Builder 5 c++ 字符串不能在 0 处索引
- AssertErrorProc on C++ builder XE4
- c++ Builder XE4 -自动补全和语法错误高亮显示