标签: c++builder

了解.cbproj文件中的包导入

我正在使用Embarcadero RAD Studio 2010(C++).项目文件(.cbproj)有五个不同的标记,包含.bpis或.libs列表.我想了解一些关于链接器如何使用这些库文件列表的信息(使用或不使用运行时包构建时).

LinkPackageImports

LinkPackageStatics

AllPackageLibs

PackageLibs

PackageImports
我想我已经理解了最后一个.它包含可以从IDE中的"项目属性"设置的运行时包列表.

这个问题的动机是我试图从我的应用程序中消除不必要的依赖项..cbproj中的这五个标签似乎都包含各种不同的lib和bpis.我知道我不需要的一些库,以及我认为我不需要的一些库.从某些列表中删除某些库似乎没有任何效果,而从其他列表中删除其他库会导致表单的链接器错误[ILINK32 Error] Fatal: Unable to open file 'FILENAME.OBJ'

我正在慢慢解决所有链接器问题,但是当我在这五个列表中的一个中包含库名称时,确切地知道我告诉链接器要做什么将非常有帮助.

linker c++builder c++builder-2010 runtime-packages

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

FindNextFile在64位Windows上失败?

使用C++ Builder 2007,FindFirstFile和FindNextFile函数似乎无法在64位版本的Vista和XP上找到某些文件.我的测试应用程序是32位.

如果我使用它们来遍历文件夹C:\ Windows\System32\Drivers,它们只能找到一些文件,尽管在命令提示符下发出dir命令时有185个文件.使用相同的示例代码可以在32位版本的XP上列出所有文件.

这是一个小例子程序:

int main(int argc, char* argv[])
{
  HANDLE hFind;
  WIN32_FIND_DATA FindData;
  int ErrorCode;
  bool cont = true;

  cout << "FindFirst/Next demo." << endl << endl;

  hFind = FindFirstFile("*.*", &FindData);
  if(hFind == INVALID_HANDLE_VALUE)
  {
    ErrorCode = GetLastError();
    if (ErrorCode == ERROR_FILE_NOT_FOUND)
    {
      cout << "There are no files matching that path/mask\n" << endl;
    }
    else
    {
      cout << "FindFirstFile() returned error code " << ErrorCode << endl;
    }
    cont = false;
  }
  else
  {
    cout << …
Run Code Online (Sandbox Code Playgroud)

c++ 64-bit c++builder

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

我可以在调试C++应用程序时进入VCL(Pascal)代码吗?

我有一个Delphi应用程序,我们正在迁移到C++.在调试我的Delphi代码时,我经常做的一件事是进入VCL本身,以准确了解正在发生的事情,以跟踪​​一些错误.这在C++ Builder中是否可行?

假设我在C++ Builder中,我称之为"ShowMessage".我可以在调试会话中进入该调用并动态切换到Pascal吗?

delphi debugging vcl c++builder

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

将Borland C++ Builder移植到Qt

我必须在Windows 7/mingw下使用g ++将一个项目从Windows XP下的Borland C++ Builder 5.0移植到Qt 4.7.1.库和命令行实用程序已经完成,现在我必须处理使用Borland VCL的GUI应用程序.
任何人都可以推荐任何工具或库来简化这项任务吗?
有没有人有这方面的经验?

编辑补充说:好吧,我采取了牛角,并从头开始实施GUI.我不得不说,评论员是对的:我看不出任何使用现有Borland GUI来简化流程的方法.

user-interface qt porting vcl c++builder

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

Embarcadero C++ Builder是IDE的不错选择吗?

因为我们(我和我合作的人)在使用C++项目时越来越沮丧VS2010 sp1中的250 000+ LOC(这个IDE的速度简直令人难以置信),在我的公司,我们谈论的是将代码迁移到某些不同的IDE.我们做了一些研究,一个强有力的候选人似乎是Embarcadero C++ builder 2011 XE.有什么想法吗?这有什么好处吗?它与VS2010终极相比如何?

c++ c++builder

11
推荐指数
6
解决办法
2万
查看次数

解析C++源代码并将标题内联方法移动到.cpp源文件的工具?

我们的应用程序的源代码是数十万行,数千个文件,并且在非常古老的地方 - 该应用程序最初是在1995年或1996年编写的.在过去的几年里,我的团队已经大大提高了源代码的质量,但是一个问题仍然是特别困扰我:许多类在其头文件中完全定义了许多方法.

在某些情况下,我对在头文件中内联声明的方法没有任何问题 - 一个struct的构造函数,一个简单的方法,其中内联可以使它更快(我们有一些像这样的数学函数),等等.但内联方法的自由使用没有明显原因是:

  • 很难找到方法的实现(特别是在类的树中搜索虚函数,只发现一个类在头中声明了它的版本......)
  • 可能会增加编译的代码大小
  • 可能会导致我们的链接器出现问题,这对于大型代码库而言众所周知的.公平地说,它在过去几年里变得更好,但它并不完美.

最后一个原因现在可能会给我们带来问题,这是通过代码库并将大多数定义移动到源文件的一个很好的理由.

我们的代码库非常庞大. 是否有可以为我们(大部分)做这个的自动化工具?

笔记:

  • 我们使用Embarcadero RAD Studio 2010.换句话说,C++的方言包括VCL和其他扩展等.
  • 一些标题是独立的,但大多数标题与相应的.cpp文件配对,就像通常那样.除了扩展名之外,文件名是相同的,即,如果在Xh中定义了方法,则可以将它们移动到X.cpp.这也意味着该工具不必处理整个项目的解析 - 它可能只是解析各个.cpp/.h文件对,忽略包含等,只要它能够可靠地识别定义了主体的方法在一个类声明中移动它.

c++ refactoring inline c++builder automated-refactoring

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

MDI应用程序在空闲时消耗100%的CPU

我正在研究用C++ Builder 2010编写的MDI应用程序.当子窗口处于最大化状态时,应用程序在空闲模式下消耗100%的CPU时间.

我使用了'Very Sleepy'分析器,它显示该功能Sd_childFinalize正在使用99%的CPU资源,但我无法在我的代码中找到它.sd_Child.cpp是定义MDI子表单类的C++单元.我只@@Sd_child@Finalize在可执行文件中找到符号.请帮助我了解如何调试此问题.

delphi mdi c++builder

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

RAD Studio 2011(?)

有没有关于Embarcadero的Delphi/cbuilder的下一个版本(2011)的信息?

是否存在指向与下一个Delphi/cbuilder相关的信息的链接,关于何时以及可能包含哪些内容?

delphi c++builder delphi-xe

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

命名管道从Windows服务到客户端应用程序

我的故事是我正在设计一个必须与Windows服务通信的新应用程序.经过大量研究后,我得出结论,命名管道是推荐的方法(如何从我的Delphi程序的一个实例发送一个字符串到另一个?)但是,似乎我不能在Win7中使用SendMessage或命名管道由于安全问题......消息永远不会到达应用程序的服务之外.

我使用的是Russell Libby的名为Pipe的组件,它在普通的桌面应用程序之间顺利运行,但Windows服务似乎在解决方案中占了一席之地.进一步的研究告诉我,双方都可以开放安全性让他们进行沟通,但是,我对此的知识水平最低限度,而且我无法对可能的API调用做出正面或反面的讨论. .

基于Delphi组件pipes.pas,需要做些什么来打开这个宝宝,这样双方才能开始交谈?我确定pipes.pas文件中的以下两个函数标识了安全属性,是否有人能够帮助我在这里?

谢谢!

procedure InitializeSecurity(var SA: TSecurityAttributes);
var
  sd: PSecurityDescriptor;
begin

  // Allocate memory for the security descriptor
  sd := AllocMem(SECURITY_DESCRIPTOR_MIN_LENGTH);

  // Initialize the new security descriptor
  if InitializeSecurityDescriptor(sd, SECURITY_DESCRIPTOR_REVISION) then
  begin
    // Add a NULL descriptor ACL to the security descriptor
    if SetSecurityDescriptorDacl(sd, True, nil, False) then
    begin
      // Set up the security attributes structure
      SA.nLength := SizeOf(TSecurityAttributes);
      SA.lpSecurityDescriptor := sd;
      SA.bInheritHandle := True;
    end
    else
      // Failed to init the sec descriptor
      RaiseWindowsError; …
Run Code Online (Sandbox Code Playgroud)

delphi windows-services desktop-application c++builder named-pipes

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

如何删除页面控件与其选项卡表之间的边距?

我注意到TPageControl中TTabSheet的Left属性始终为4.因此,TPageControl边框与TTabSheet中的控件之间始终至少有4像素的边距.我想将此边距设置为0(至少对于左边框),但我不能将TTabSheet.Left设置为0; 它总是自动恢复为4像素.

我试图在OnResize for TTabSheet和TTabControl中设置Left属性,但它没有帮助.

如何将此边距减少到0(至少对于左边框)?我正在使用C++ Builder 6.

delphi vcl c++builder c++builder-6

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