小编Rud*_*uis的帖子

这个stdout重定向如何工作?

下面的代码将stdout重定向到文件fname,然后重定向回原始标准输出.这对我来说可以.但我无法理解它是如何运作的.如果有人能帮助我理解我将会相信它.

    printf("\n This is console");
    fflush(stdout);
    fgetpos(stdout, &pos);
    fd = dup(fileno(stdout));
    freopen(fname, "a+", stdout);   

    printf("inside file op");  

    fflush(stdout);
    dup2(fd,fileno(stdout));
    close(fd);
    clearerr(stdout);
    fsetpos(stdout, &pos);
    printf("\nBack to Console");
Run Code Online (Sandbox Code Playgroud)

c c++ programming-languages

5
推荐指数
1
解决办法
1158
查看次数

推荐指南/书籍阅读装配

最近我对读取汇编感兴趣,汇编由像ollydbg这样的反汇编程序显示.我想阅读这个程序集的原因是为了了解其他开发人员如何构建他们的应用程序或程序所具有的二进制文件的文件格式之类的东西.

这不像我是一个完整的编程新手,因为我已经使用C++和C#一段时间了.我对C++有了深刻的理解,因此整个指针概念对我来说很清楚.

我知道互联网上有大量的装配指南,但我不知道这个教程有多可靠:http://jakash3.wordpress.com/2010/04/24/x86-assembly-a-crash -course-tutorial-i /对我来说非常有用,这是一种教程,只是对指令的简短解释.这一点对我来说非常清楚,但它并未涵盖所有汇编代码.

我希望有人可以提供一个很好的指导/教程.

c++ assembly reverse-engineering

5
推荐指数
1
解决办法
1543
查看次数

添加或删除子对象的 BeginUpdate/Endupdate 块:delphi 中的误解?

此问题遵循以下问题:为什么东京 10.2.3 中存在这种变化?并介绍一下我认为delphi中的一个误解

基本上,在 firemonkey 中,您拥有一些方法BeginUpdateEndUpdate允许您在更新控件时停用/激活控件。realign每次更改控件的属性之一时,不必重新调整控件几次,而是在最后调用时只执行一次EndUpdate

下面是这些函数的实现:

procedure TControl.BeginUpdate;
var
  I: Integer;
begin
  if FUpdating = 0 then
    DoBeginUpdate;
  Inc(FUpdating);
  if FControls <> nil then
    for I := 0 to FControls.Count - 1 do
      FControls[I].BeginUpdate;
end;

procedure TControl.EndUpdate;
var
  I: Integer;
begin
  if IsUpdating then
  begin
    if FControls <> nil then
      for I := 0 to FControls.Count - 1 do
        FControls[I].EndUpdate;
    Dec(FUpdating);
    if not IsUpdating then
    begin …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey

5
推荐指数
0
解决办法
846
查看次数

如何在Delphi中为变量分配语句?

下面的C代码如何在Delphi中完成?我尝试翻译,但似乎Delphi不允许使用此语法。基本上,我需要像在C代码中那样将函数分配给变量。在Delphi上怎么做?

这是参考的C代码:

void EnumWindowsTopToDown(HWND owner, WNDENUMPROC proc, LPARAM param)
{
    HWND currentWindow = GetTopWindow(owner);
    if (currentWindow == NULL)
        return;
    if ((currentWindow = GetWindow(currentWindow, GW_HWNDLAST)) == NULL)
        return;
    while (proc(currentWindow, param) && (currentWindow = GetWindow(currentWindow, GW_HWNDPREV)) != NULL);
}
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

type
  TFNWndEnumProc = function(_hwnd: HWND; _lParam: LPARAM): BOOL; stdcall;

    procedure EnumWindowsTopToDown(Owner: HWND; Proc: TFNWndEnumProc;
      _Param: LPARAM);
    var
      CurrentWindow: HWND;
    begin
      CurrentWindow := GetTopWindow(Owner);
      if CurrentWindow = 0 then
        Exit;

      CurrentWindow := GetWindow(CurrentWindow, GW_HWNDLAST);
      if CurrentWindow = 0 then
        Exit;

      while Proc(CurrentWindow, …
Run Code Online (Sandbox Code Playgroud)

delphi

5
推荐指数
1
解决办法
186
查看次数

如何调用此方法?

Delphi书中的编码有关于接口约束的这个例子:

1    type
2      IStoppable  =  interface
3        procedure Stop;
4      end;
5
6      TWidget<T: IStoppable>  =  class
7        FProcess: T;
8        procedure StopProcess;
9      end;
10
11   { TWidget<T> }
12
13   procedure  TWidget<T>.StopProcess;
14   begin
15     FProcess.Stop;
16   end;
Run Code Online (Sandbox Code Playgroud)

我在第15行不明白他怎么称呼"停止"方法?是不是FProcess是一个通用变量?那他怎么能从变量中调用一个方法呢?

他怎么能直接从界面调用"停止"方法呢?是不是应该调用实现的方法?

delphi

4
推荐指数
2
解决办法
135
查看次数

如何从TTreeView中删除节点及其对象

我正在使用Delphi 10 Starter版.我正在研究如何使用Delphi的TTreeView组件.

一切正常,没有问题.我留下的唯一问题是:

将对象添加到节点后,删除项及其对象的正确方法是什么?

这是我的代码(见Button6Click):

type
  TMyNode2 = class
  public
    nom: Integer;
    comm: String;
  end;

var
  Form1: TForm1;
  MyNode2: TMyNode2;

procedure TForm1.Button1Click(Sender: TObject); // add node
var
  x: TTreeNode;
begin
  x := tv1.Items.Add(tv1.Selected, Edit1.Text + ' ' + IntToStr(Round(Random(100))));
  x.ImageIndex := 1;
  x.SelectedIndex := x.ImageIndex;
  x.StateIndex := x.ImageIndex;
end;

procedure TForm1.Button4Click(Sender: TObject); // add child node
var
  x: TTreeNode;
begin
  x := tv1.Items.AddChild(tv1.Selected, 'Child ' + Edit1.Text + ' ' + IntToStr(Round(Random(100))));
  x.ImageIndex := 2; …
Run Code Online (Sandbox Code Playgroud)

delphi treeview

4
推荐指数
1
解决办法
1285
查看次数

如何在剪贴板上可靠地检测RICHTEXT格式?

Embarcadero公司的RAD Studio VCL有TClipboard.HasFormat方法,有使用例如Clipboard.HasFormat(CF_TEXT)Clipboard.HasFormat(CF_BITMAP)等.

但我没有找到任何支持CF_RTFCF_RICHTEXT格式描述符,表明剪贴板中的富文本格式.

所以我在Microsoft WordPad中创建了一些格式化文本并将其复制到剪贴板.然后我用剪贴板间谍程序来检查剪贴板上的格式:

在此输入图像描述

这里列出了3种富文本格式的格式描述符C078,C16BC1A5.

这些格式描述符是普遍的还是依赖于单个系统或当前情况?即,我通常可以Clipboard.HasFormat($C078)用来检测剪贴板上的任何RichText格式吗?还是有另一种方法吗?

delphi clipboard richtext delphi-10.1-berlin

4
推荐指数
1
解决办法
787
查看次数

如何检查后代类是否覆盖所有虚拟方法?

上下文

在DelphiAST中有一个基类:TmwSimplePasPar解析Delphi代码.
另外还有一个类:TPasSyntaxTreeBuilder它应该覆盖其基类中的每个方法.

有没有办法检查后代类是否覆盖了其基类中的每个虚方法?
能够放入断言会很高兴.

TPasSyntaxTreeBuilder.Create;
begin
  Assert(Self.OverridenMethods.Count = (BaseClass.VirtualMethodCount - TObject.VirtualMethodCount)); 
  ....
Run Code Online (Sandbox Code Playgroud)

请注意,我在谈论所有虚拟方法,而不仅仅是抽象方法(不实现抽象方法发出警告).

delphi inheritance virtual-functions rtti

4
推荐指数
1
解决办法
191
查看次数

如何使用Delphi 10.2中的ToolsAPI获取当前项目的版本号

在Delphi 2007中,我可以使用以下ToolsAPI调用轻松获取当前项目的版本信息:

procedure Test;
var
  ProjectOptions: IOTAProjectOptions;
  Project: IOTAProject;
  Major: Variant;
  Minor: Variant;
  Release: Variant;
  Build: Variant;
begin
  // GxOtaGetCurrentProject is a function in GExpert's GX_OTAUtils unit that returns the current IOTAProject
  Project := GxOtaGetCurrentProject;
  if Assigned(Project) then begin
    ProjectOptions := Project.ProjectOptions;
    if Assigned(ProjectOptions) then begin
      Major := ProjectOptions.Values['MajorVersion'];
      Minor := ProjectOptions.Values['MinorVersion'];
      Release := ProjectOptions.Values['Release'];
      Build := ProjectOptions.Values['Build'];
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

在Delphi 10.2.3中,无论实际版本号如何,它都将始终返回版本1.0.0.0.这是"简单"的案例:VCL应用程序.

我还尝试了"Keys"值,它返回一个TStrings指针.在那里我也得到了FileVersion字符串,但它总是"1.0.0.0".

我想这与各种平台和配置的支持有关,但我找不到任何关于它现在应该如何工作的文档.我还搜索了ToolsAPI.pas中的"版本"和"发布",但没有出现任何可疑的内容.

有关如何在Delphi 10.2中获取版本信息的任何提示?

delphi toolsapi otapi delphi-10.2-tokyo

4
推荐指数
1
解决办法
897
查看次数

代码编辑器中的这句话{$ R*.dfm}是什么?

{$R *.dfm}代码编辑器中的这个短语是什么?

我试过这个:

//{$R *.dfm}
Run Code Online (Sandbox Code Playgroud)

delphi pascal

4
推荐指数
1
解决办法
129
查看次数