我正在尝试在RAD Studio XE2中创建新的VCL组件.我使用C++ Builder或Delphi得到了相同的结果:

如何获取VCL组件列表?我试过"修复设置",但没有成功.
我有个问题。我需要将字符串类型转换为 unicode。我知道方法像
string.c_str();
Run Code Online (Sandbox Code Playgroud)
但它在我的代码中不起作用。
我有功能
void modify(string infstring, string* poststring)
Run Code Online (Sandbox Code Playgroud)
在其中我需要在备忘录中显示 infstring。像一个
Form1->Memo1->Lines->Add("some text "+infstring.c_str()+" some text");
Run Code Online (Sandbox Code Playgroud)
但编译器说我“E2085 无效指针添加”
我该如何解决我的问题?
假设我有一个公共类和一个私有实现类(例如PIMPL模式),我希望用一个带有checked delete的模板智能指针类来包装私有类,如下所示:
PublicClass.h
class PrivateClass;
// simple smart pointer with checked delete
template<class X> class demo_ptr
{
public:
demo_ptr (X* p) : the_p(p) { }
~demo_ptr () {
// from boost::checked_delete: don't allow compilation of incomplete type
typedef char type_must_be_complete[ sizeof(X)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete the_p;
}
private:
X* the_p;
};
// public-facing class that wishes to wrap some private implementation guts
class PublicClass
{
public:
PublicClass();
~PublicClass();
private:
demo_ptr<PrivateClass> pvt;
};
Run Code Online (Sandbox Code Playgroud)
PublicClass.cpp
#include "PublicClass.h"
class PrivateClass
{ …Run Code Online (Sandbox Code Playgroud) 使用旧技术赢取8来自动运行我的程序是否正确?
我没有赢8来测试,所以我希望有人已经知道了.
当PC重新启动时,我的程序没有启动,这会导致什么?
我使用旧的bcc32(borland 5.5)(我知道这是非常古老的编译器,但不要告诉我,我不应该使用它)
我可以使用控制台或Windows子系统进行编译.
我不想用windows子系统编译,我想控制台只有main()ad没有"windows.h"包含(从那里我调用我自己的库打开窗口并自己内部处理消息泵)
它的工作原理,但问题只是当我用控制台子系统编译时,出现丑陋的蓝色控制台窗口,我不需要它
所以我认为我只需要没有windows子系统编译,没有控制台子系统编译,只是让我的程序在一些原始模式下编译(两者都没有控制台创建,没有WinMain入口点 - 怎么做?
在我编译的C++ Builder中,我得到了
[ilink32 Error] Error: 'C:\PATH\TO\A\LIB\INCLUDED\IN\THE\PROJECT\ALIBRARY.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
Run Code Online (Sandbox Code Playgroud)
当我用实用程序转换.lib时coff2omf,新的lib会丢失重要的功能.
有人知道如何在 builder XE 中同时显示头文件和源文件吗?
我知道我可以在它们之间切换,但我宁愿每个文件都有一个选项卡。
谢谢
我现在有一个相当罕见的情况.我有一个直接与Windows的消息队列交互的应用程序.此应用程序还使用LuaJIT运行外部Lua脚本.我想为这些脚本设置调试工具,因此我创建了一个普通的VCL应用程序,然后将其转换为DLL库.当第一个应用程序启动与库的调试会话时,此DLL创建一个分离的线程,其中整个VCL工具被初始化并运行.
procedure TDebuggerThread.Execute;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm (TMainForm, MainForm);
Application.Run;
end;
Run Code Online (Sandbox Code Playgroud)
VCL是否完全支持以这种方式执行?哪个线程会TThread.Synchronize (Proc: TThreadProc)发送消息?
Inb4"向VCL和主应用程序的消息将会混乱" - 它们不会因为每个线程都有自己的消息队列.
此外,您可以在此处查看来源.(也许)有问题的库被命名LuaDebugger.在地方适当的客户端(Core,Engine,Client)我目前使用的LuaDefaultHost,这是一个相当简单的控制台应用程序,要求调试器和行为大多喜欢lua.exe.与控制台客户端,调试器的工作原理出奇的顺利-我遇到的唯一问题是,如果我关闭控制台窗口,而库仍在使用,VCL抛出"窗口句柄不再有效"(俄文:/).如果我让客户端按照预期的方式完成与调试器的交互,一切都很顺利.可能Windows.TerminateThread在单元定稿期间调用应该解决这个问题.
下面的简单示例代码,包含生成的汇编程序.我很惊讶生成的代码涉及变体.Delphi当然不具备.
TDateTime t1;
TDateTime t2;
...
int x = 2 * (t2 - t1);
Run Code Online (Sandbox Code Playgroud)
生成的代码.
Unit23.cpp.18: int x = 2 * (t2 - t1);
00401814 66C745C82400 mov word ptr [ebp-$38],$0024
0040181A 8D45DC lea eax,[ebp-$24]
0040181D E852180000 call $00403074
00401822 50 push eax
00401823 FF45D4 inc dword ptr [ebp-$2c]
00401826 8D55A8 lea edx,[ebp-$58]
00401829 8D45A0 lea eax,[ebp-$60]
0040182C E8FB000000 call System::TDateTime::operator -(const System::TDateTime &)
00401831 DD5D94 fstp qword ptr [ebp-$6c]
00401834 8D5594 lea edx,[ebp-$6c]
00401837 8D45EC lea eax,[ebp-$14]
0040183A E8F1180000 call …Run Code Online (Sandbox Code Playgroud) My Environment: Rad Studio XE4 using C++
Run Code Online (Sandbox Code Playgroud)
我正在使用TThread开发一个软件.最近,我遇到了一个问题,即在程序启动几天后,TThread突然被破坏.
在TThread中,线程使用Synchronize()方法更改表单(例如TLable)的显示.我想知道这可能会引起一些问题.
我正在记录线程中的几个部分,以便我可以找到问题的原因.但是当我检查日志时,我只能发现突然调用了TThread的析构函数.
TThread的FreeOnTerminate设置为true.
该程序运行两个线程.只有一个线程突然被破坏,另一个线程即使在问题发生后仍在工作.
我正在寻找如何解决这类问题的原因.