小编klu*_*udg的帖子

为什么Delphi编译器没有内联汇编函数?

有时我会编写很短的汇编函数

function SeniorBit(Value: LongWord): Integer;
asm
        OR    EAX,EAX
        JZ    @@Done
        BSR   EAX,EAX
        INC   EAX
@@Done:
end;
Run Code Online (Sandbox Code Playgroud)

这似乎是内联的最佳候选人:

function SeniorBit(Value: LongWord): Integer; inline;
Run Code Online (Sandbox Code Playgroud)

但是Delphi编译器不允许它.为什么?


更新:

感谢ldsandon,有一份关于QC的一份有着5.5年历史的公开报告.该报告包含一些提议(如扩展asm指令)以简化编译器的asm内联.我更倾向于在过程/函数级别上引入"裸"指令,该指令向编译器说它不必为过程创建堆栈帧,并且可选地应保留哪些寄存器(在eax,edx和ecx中).

如果使用BASM代码进行高效内联过程的一般任务很困难(并且可能是不必要的),那么一个好主意是为最重要的案例启用内联(如明确声明的寄存器使用的裸函数).

delphi assembly inlining basm

7
推荐指数
2
解决办法
1947
查看次数

XMLDoc Delphi源代码文档生成

我假设XML和Delphi文档指南正在成为源代码记录注释的事实标准.那很好.不好的是我找不到任何完全支持这些标准的Delphi文档生成器(免费或商业)(例如Doc-O-Matic Express不支持<list>标签).

问题是:XML文档标准和Delphi源代码XMLDoc文档生成器现在可以使用了什么?

delphi documentation-generation

7
推荐指数
1
解决办法
3366
查看次数

如何在Free Pascal中使用匿名方法?

我尝试使用Delphi的匿名方法语法:

type
    fun = reference to function(): Integer;
Run Code Online (Sandbox Code Playgroud)

Fpc显示语法错误:

Error: Identifier not found "reference"
Run Code Online (Sandbox Code Playgroud)

什么是免费Pascal相当于Delphi的匿名方法,如果有的话?

delphi lambda closures freepascal anonymous-methods

7
推荐指数
1
解决办法
3476
查看次数

获得年度最佳一周

Delphi Xe,Win 7,系统TimeZone UTC + 4:0,系统中一周的第一天 - 星期一,时间与time.windows.com同步

在标准组件Delphi Win32的调色板中有组件MonthCalendar,其属性为WeekNubers = true(显示周数),date = now,第一天 - 星期一.

显示19号(今天) - 第43周的数字.

我通过dateutils.WeekOfTheYear(now)=请求号码返回42.

在此输入图像描述

来源(0.5 Mb)http://www.sendspace.com/file/yuz6ko

通过组件MonthCalendar的初始代码判断 - 就像所有它都是真的(即使不暴露一周的第一天,它从系统参数中获取值).

并在询问WeekOfTheYear它被告知,所有被认为也适用标准ISO,但数字不重合:(

无论如何,我不明白,一周消失 - 如果要查看日历,应该是43,如果考虑,那个星期53和去年的第一个问题......

顺便说一下,2011年1月1日的WeekOfTheYear也会回来52但是应该返回1 ...

为什么区别和哪里是正确的?

delphi monthcalendar

7
推荐指数
1
解决办法
1万
查看次数

如何在 Julia 和 Juno 中创建项目?

我已经安装了 Julia、Atom 和 Juno。我曾经认为在开始编写任何代码之前应该创建一个项目,但我在 Juno IDE 中找不到“新项目”项。

Julia 是否支持项目的概念?如果是,我如何创建一个简单的项目,向其中添加 Julia 文件,运行它等?

project julia juno-ide

7
推荐指数
2
解决办法
3912
查看次数

使用Doc-O-Matic(Express)和Delphi

我正在寻找一个生成Delphi源代码文档的工具,我想尝试一下Doc-O-Matic Express(免费).是否有任何指导初学者如何使用Doc-O-Matic Express来记录Delphi源代码(管理doc-o-matic项目,首选docblock样式,完整的docblock语法等)?

delphi documentation-generation

6
推荐指数
1
解决办法
1462
查看次数

RTTI TRttiMethod.Invoke,stdcall和const参数的错误

我有RTTI TRttiMethod.Invoke,stdcall和const参数的问题:

    obj := TClassRecordTest.Create;
    try
      b.a := 10; b.b := 100;

      a.a := 1;  a.b := 2;
      writeln('b.a='+IntToStr(b.a)+' b.b='+IntToStr(b.b));
      writeln;
      writeln('call test1');
      writeln('a.a='+IntToStr(a.a)+' a.b='+IntToStr(a.b));
      r := VToRec(RTTICall(obj, 'Test1', @a, @b));
      writeln('test1 r.a='+IntToStr(r.a)+' r.b='+IntToStr(r.b));

      a.a := 2;  a.b := 3;
      writeln('call test2');
      writeln('a.a='+IntToStr(a.a)+' a.b='+IntToStr(a.b));
      r := VToRec(RTTICall(obj, 'Test2', @a, @b));
      writeln('test3 r.a='+IntToStr(r.a)+' r.b='+IntToStr(r.b));

      a.a := 3;  a.b := 4;
      writeln('call test3');
      writeln('a.a='+IntToStr(a.a)+' a.b='+IntToStr(a.b));
      r := VToRec(RTTICall(obj, 'Test3', @a, @b));
      writeln('test3 r.a='+IntToStr(r.a)+' r.b='+IntToStr(r.b));

      a.a := 4;  a.b := 5;
      writeln('call test4'); …
Run Code Online (Sandbox Code Playgroud)

delphi rtti delphi-xe

6
推荐指数
1
解决办法
1216
查看次数

如何在Delphi中声明类方法的类型?

例如,如何为类过程声明类型

type
  TTest = class
    procedure Proc1;
    class procedure Proc2;
    class procedure Proc3; static;
  end;

  TProc1 = procedure of object;
  TProc2 = ???;
  TProc3 = ???;
Run Code Online (Sandbox Code Playgroud)

delphi methods class

6
推荐指数
1
解决办法
624
查看次数

如何在Delphi中过载Inc(Dec)运算符?

Delphi文档说可能会使Inc和Dec运算符超载; 我认为没有有效的方法可以做到这一点.以下是尝试重载Inc运算符; 一些尝试导致编译错误,一些尝试导致运行时访问冲突(Delphi XE):

program OverloadInc;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TMyInt = record
    FValue: Integer;
//    class operator Inc(var A: TMyInt);   DCC error E2023
    class operator Inc(var A: TMyInt): TMyInt;
    property Value: Integer read FValue write FValue;
  end;

class operator TMyInt.Inc(var A: TMyInt): TMyInt;
begin
  Inc(A.FValue);
  Result:= A;
end;

type
  TMyInt2 = record
    FValue: Integer;
    class operator Inc(A: TMyInt2): TMyInt2;
    property Value: Integer read FValue write FValue;
  end;

class operator TMyInt2.Inc(A: TMyInt2): TMyInt2;
begin
  Result.FValue:= A.FValue + 1; …
Run Code Online (Sandbox Code Playgroud)

delphi operator-overloading increment

6
推荐指数
1
解决办法
275
查看次数

FPC IDE:找不到单位系统

我刚刚安装了 FPC 3.2.0(在 Linux Mint 19.3 上)并尝试使用 FPC IDE。bin我从安装子文件夹启动IDE ./fp,在IDE中编写了一个最简单的程序

program hello;

begin
  writeln('hello');
end.
Run Code Online (Sandbox Code Playgroud)

将程序保存为hello.pas,当我编译它时,我得到

(3,1) Fatal: Can't find unit system used by hello
(0) Fatal: Compilation aborted
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为system是编译器的单位,而不是用户的单位。

我尝试用谷歌搜索这个问题,在不同的论坛上找到了几个帖子,其中一个问题可以追溯到2007年,但没有一个问题得到解答。

哪里有办法解决这个问题,或者 FPC IDE 已经死了大约 15 年了?

freepascal

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