SQL select命令
SELECT a.RDB$CHARACTER_SET_NAME FROM RDB$DATABASE a
Run Code Online (Sandbox Code Playgroud)
返回NULL.在创建新数据库时未指定任何字符集时使用了什么字符集?各种版本的Firebird(1.0,2.0,2.5.1等)之间有区别吗?
关键字__super是Microsoft特有的.它用于访问父类的虚方法.您是否知道borland c ++/delphi编译器的替代关键词?
class MyBaseClass
{
virtual void DoSomething();
};
class MyDerivedClass : public MyBaseClass
{
virtual void DoSomething();
};
void MyBaseClass::DoSomething()
{
// some code
}
void MyDerivedClass::DoSomething()
{
__super::DoSomething(); // calls implementation of base class - no need to know name of base class
// implementation specific to derived class adding new functionality
}
Run Code Online (Sandbox Code Playgroud) 我目前正在研究项目,其主要任务是读取存储在SQL数据库中的数据并以用户友好的形式显示它们.使用的编程语言是C++.我在Borland C++ Builder 6环境中工作.但我认为标题中提出的问题与编程语言或库无关.从db读取数据时,我经常在类名中遇到这些术语而不确切知道它们代表什么.我知道它们表现为存储在db中的数据的接口.但为什么需要使用两个接口类而不是一个?
我有基于类 ServiceBase 的常规 C# 服务。此服务在启动时加载 c++ 动态链接库。有时会发生服务在非托管代码中崩溃。不幸的是,事件查看器仅对此进行了非常简短的描述。如果他的消息是这样的:
应用程序:StreamMapService.exe 框架版本:v4.0.30319 描述:由于未处理的异常,进程被终止。异常信息:异常代码 c0000005,异常地址 00000012"。
99% 确定问题出在非托管代码中。问题是这种情况很少发生(通常每天一次),并且仅在作为服务运行时发生。在调试器下一切正常。为了找出有问题的代码,我按以下方式编辑了我的主要方法:
static void Main()
{
try
{
if (!Environment.UserInteractive)
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
else
{
var services = new Service1();
services.Start();
Console.WriteLine("Press return to exit");
Console.ReadLine();
services.Stop();
}
}
catch (SEHException e)
{
// wrapper for all exceptions having its origin in unmanaged code
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Crash time: {0}\n", DateTime.Now.ToString());
sb.AppendFormat("\nMessage:\n{0}", e.Message);
sb.AppendFormat("\nSource: {0}\n", e.Source); …Run Code Online (Sandbox Code Playgroud) 我正在使用RichTextBox控件来显示应用程序日志.我通过几次调用RichTextBox :: AppendText方法每秒更新一次控制.对我来说真正烦人的是光标一直滚动到文本的最后一行.当用户需要分析开头的日志时,它非常不舒服.我试过以下解决方案来解决我的问题:
int pos = tb_logs.SelectionStart;
tb_logs.AppendText("log message");
tb_logs.SelectionStart = pos;
Run Code Online (Sandbox Code Playgroud)
这不是问题的核心,因为定期重新绘制控制,这非常分散注意力.有一些更清洁的解决方案?
我在叫ConnectEx()方法.它返回FALSE值,所以我通过WSAGetLastError调用检查错误代码.有时会发生返回值为零的情况.这是什么意思?
我的应用程序是C#和C++代码的混合.用C#编写的启动模块在初始化阶段C++模块中通过COM(组件对象模型)机制加载.一切正常,直到我决定添加到C#部分wcf服务.所有wcf服务调用都使用COM路由到C++代码.添加一些新方法后,我注意到输出窗口中存在内存泄漏.所以我从截图中可以看到断点到C++类的析构函数.从这一点开始,奇怪的事情就开始发生了.程序到达断点后意外崩溃.第一个奇怪的事情是,当我运行没有设置断点的程序时,它会慷慨地结束.第二个奇怪的事情是程序崩溃的方式就像它没有调试器一样运行.单击"在调试器中打开"按钮(或类似的东西)后,我收到错误消息:"程序已在调试器下打开." 输出窗口中没有消息可以指向错误的来源,没有可疑代码.当向析构函数添加消息框时,它会显示小数秒,然后整个应用程序关闭(不添加用户机会来读取消息框中显示的内容).拼命寻找任何线索.
PS问题仅在至少调用一次wcf方法时发生.不依赖于此特定调用中的程序流是否路由到C++级别.


以下操作系统的标准unicode字体是什么:
Windows XP
Windows Vista
窗口7
按标准来说,我的意思是它们存在于新安装的操作系统中 - 无需将它们作为附加软件包安装.
这是我的程序使用的类层次结构:

TForm_Upgrade_Database的构造函数如下所示:
__fastcall TForm_Upgrade_Database :: TForm_Upgrade_Database(TComponent*Owner,int newest_version):TForm(Owner){}
在尝试创建公式的实例之后
TForm_Upgrade_Database *dlg = new TForm_Upgrade_Database(this, newest_version);
Run Code Online (Sandbox Code Playgroud)
我的程序抛出EStackOverflow异常

我停止了程序并在TForm_Upgrade_Database构造函数中使用断点再次运行它.几步之后callstack看起来像这样:

如何TCustomForm构造函数继续尝试调用其后代的构造函数???
最小的测试用例:
so_project.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
TForm_Upgrade_Database *form = new TForm_Upgrade_Database(NULL, 10);
delete form;
form = NULL;
return 0;
}
//---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
f_form.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm_Upgrade_Database *Form1;
//---------------------------------------------------------------------------
__fastcall TForm_Upgrade_Database::TForm_Upgrade_Database(TComponent* Owner, int x)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
f_form.h:
//---------------------------------------------------------------------------
#ifndef f_formH
#define …Run Code Online (Sandbox Code Playgroud) 在Delphi中开发新组件时,我遇到了这种低效率.每次我对源代码进行增量更改(例如,修复bug)时,我都会构建新组件并将其安装在Component Palette上.还行吧.在IDE的另一个实例中,我打开了一个使用此组件的项目.它是我的一个表单上的可视组件.要应用新更改,需要重新启动此第二个实例 - 关闭和重新打开表单或项目是不够的.这个过程可以优化吗?
delphi development-environment custom-component c++builder-xe
c# ×3
c++ ×3
c++builder ×2
delphi ×2
autoscroll ×1
c++builder-6 ×1
callstack ×1
com ×1
constructor ×1
dataset ×1
datasource ×1
firebird ×1
fonts ×1
interface ×1
refresh ×1
richtextbox ×1
service ×1
sql ×1
unicode ×1
unmanaged ×1
winapi ×1
windows ×1