我正在使用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'
我正在慢慢解决所有链接器问题,但是当我在这五个列表中的一个中包含库名称时,确切地知道我告诉链接器要做什么将非常有帮助.
使用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) 我有一个Delphi应用程序,我们正在迁移到C++.在调试我的Delphi代码时,我经常做的一件事是进入VCL本身,以准确了解正在发生的事情,以跟踪一些错误.这在C++ Builder中是否可行?
假设我在C++ Builder中,我称之为"ShowMessage".我可以在调试会话中进入该调用并动态切换到Pascal吗?
我必须在Windows 7/mingw下使用g ++将一个项目从Windows XP下的Borland C++ Builder 5.0移植到Qt 4.7.1.库和命令行实用程序已经完成,现在我必须处理使用Borland VCL的GUI应用程序.
任何人都可以推荐任何工具或库来简化这项任务吗?
有没有人有这方面的经验?
编辑补充说:好吧,我采取了牛角,并从头开始实施GUI.我不得不说,评论员是对的:我看不出任何使用现有Borland GUI来简化流程的方法.
因为我们(我和我合作的人)在使用C++项目时越来越沮丧VS2010 sp1中的250 000+ LOC(这个IDE的速度简直令人难以置信),在我的公司,我们谈论的是将代码迁移到某些不同的IDE.我们做了一些研究,一个强有力的候选人似乎是Embarcadero C++ builder 2011 XE.有什么想法吗?这有什么好处吗?它与VS2010终极相比如何?
我们的应用程序的源代码是数十万行,数千个文件,并且在非常古老的地方 - 该应用程序最初是在1995年或1996年编写的.在过去的几年里,我的团队已经大大提高了源代码的质量,但是一个问题仍然是特别困扰我:许多类在其头文件中完全定义了许多方法.
在某些情况下,我对在头文件中内联声明的方法没有任何问题 - 一个struct的构造函数,一个简单的方法,其中内联可以使它更快(我们有一些像这样的数学函数),等等.但内联方法的自由使用没有明显原因是:
最后一个原因现在可能会给我们带来问题,这是通过代码库并将大多数定义移动到源文件的一个很好的理由.
我们的代码库非常庞大. 是否有可以为我们(大部分)做这个的自动化工具?
笔记:
我正在研究用C++ Builder 2010编写的MDI应用程序.当子窗口处于最大化状态时,应用程序在空闲模式下消耗100%的CPU时间.
我使用了'Very Sleepy'分析器,它显示该功能Sd_childFinalize正在使用99%的CPU资源,但我无法在我的代码中找到它.sd_Child.cpp是定义MDI子表单类的C++单元.我只@@Sd_child@Finalize在可执行文件中找到符号.请帮助我了解如何调试此问题.
有没有关于Embarcadero的Delphi/cbuilder的下一个版本(2011)的信息?
是否存在指向与下一个Delphi/cbuilder相关的信息的链接,关于何时以及可能包含哪些内容?
我的故事是我正在设计一个必须与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
我注意到TPageControl中TTabSheet的Left属性始终为4.因此,TPageControl边框与TTabSheet中的控件之间始终至少有4像素的边距.我想将此边距设置为0(至少对于左边框),但我不能将TTabSheet.Left设置为0; 它总是自动恢复为4像素.
我试图在OnResize for TTabSheet和TTabControl中设置Left属性,但它没有帮助.
如何将此边距减少到0(至少对于左边框)?我正在使用C++ Builder 6.
c++builder ×10
delphi ×5
c++ ×3
vcl ×3
64-bit ×1
c++builder-6 ×1
debugging ×1
delphi-xe ×1
inline ×1
linker ×1
mdi ×1
named-pipes ×1
porting ×1
qt ×1
refactoring ×1