标签: fpc

Lazarus和CodeTyphon有什么区别

首先,我看到了关于这两个的一些话题,但不是我的答案.

我在GNU/Linux上寻找一个好的FPC(Free Pascal Compiler)IDE.

有一些IDE像LazarusCodeTyphon.我需要建议选择其中之一.

我曾尝试过Lazarus,但所有的窗户都是分开的.它看起来很乱,没有趣味.

我想知道这两者有什么区别?

我想知道每个的优点/缺点.谢谢

ide comparison lazarus fpc codetyphon

16
推荐指数
3
解决办法
2万
查看次数

Freepascal真的使用*远*比gcc更少的内存

在语言枪战基准http://benchmarksgame.alioth.debian.org/表明FPC程序使用约1 /第50次的存储器的,使用克++使用比较的方案.难道这些基准无意青睐FPC或者是难道真的是FPC是要比G ++好?我一直认为这些基准测试是一系列不错的微基准测试,所以我对这些结果感到惊讶,因为50倍是相当重要的恕我直言.

参考文献:

http://benchmarksgame.alioth.debian.org/u32/pascal.php http://benchmarksgame.alioth.debian.org/u64q/pascal.html

编辑: 这变得更加有趣,因为这个页面声称pascal只使用了8KB的一些程序,这看起来非常低

g++ freepascal fpc

9
推荐指数
2
解决办法
2778
查看次数

Delphi:使用System.New()而不是局部变量有什么好处,除了节省少量内存?

让我们回到基础.坦率地说,我之前从未使用NewDispose运作过.但是,在我阅读Embarcadero技术网站上的New()文档和包含的示例以及New()Delphi Basics解释之后,它在我脑海中留下了一些问题:

System.New()除了节省少量内存之外,使用而不是局部变量有什么好处?

常用代码示例New()或多或少如下:

  var
      pCustRec : ^TCustomer;
  begin
      New(pCustRec);
      pCustRec^.Name := 'Her indoors';
      pCustRec^.Age  := 55;
      Dispose(pCustRec);
  end;
Run Code Online (Sandbox Code Playgroud)

在什么情况下上面的代码比下面的代码更合适?

  var
      CustRec : TCustomer;
  begin
      CustRec.Name := 'Her indoors';
      CustRec.Age  := 55;
  end;
Run Code Online (Sandbox Code Playgroud)

delphi pascal fpc

9
推荐指数
3
解决办法
2182
查看次数

如何通知Free Pascal Compiler为已编译的应用程序设置区域设置ID

在Delphi中,查看项目属性时有一个选项VersionInfo-> Language-> Locale ID.
我正在徘徊如何为Free Pascal下编译的程序设置这样的属性.
欢迎任何解决方案:命令行参数预处理器指令,如{$key value}; 相当于德尔福.

delphi locale pascal fpc

8
推荐指数
2
解决办法
1260
查看次数

类引用作为属性

谷歌对这些类型的搜索毫无用处,因为你得到了数亿个结果,绝对没有一个与特定问题有关.

问题很简单:

  • 是否可以在Delphi中使用类引用属性?
  • 如果是这样,怎么样?

这是我试过的......

type

  TMyObject = class
    // ...
  end;

  TMyObjectClass = class of TMyObject

  TMyObjectA = class(TMyObject)
    // specifics here
  end;

  TMyObjectB  =class(TMyObject)
    // specifics here
  end;

  TMyComponent = class(TComponent)
  private
    FObjectType: TMyObjectClass;
  published
    property ObjectType: TMyObjectClass read FObjectType write FObjectType;
  end;
Run Code Online (Sandbox Code Playgroud)

上面的代码编译得很好,但是Object Inspector根本没有显示ObjectType属性.

我的目标(如果您还没有猜到)是为了让我可以从特定基类中选择一个类后代,以使相同的组件以不同的方式运行.

我想这样做,以便组件不需要直接了解子类(它需要完全模块化).

让我说清楚一点:我不能使用Enum在子类类型之间进行选择,因为组件不能直接链接到子类类型(在这种特殊情况下根本不可能)

无论如何......提前谢谢!

delphi oop properties reference fpc

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

简单的Delphi 3d功能

任何人都可以帮我解决Delphi中一些裸骨,旧学校3D方法的例子吗?不使用openGL或firemonkey或任何外部库(vanilla canvas编码).我想要做的是能够围绕共同的原点旋转X个点.从我以往的记忆中,你从右边减去(在3d点上),使origo始终为0,0 - 然后执行计算,最后添加左/上像素偏移量以获得实际的屏幕位置.

我正在寻找的是一套小型的临时例程,ala:

  • RotateX(aValue:T3dpoint; degr:float):T3dPoint;
  • 旋转Y( - / - )
  • RotateZ( - / - )

使用这些功能,创建旧的"旋转三维立方体"(8分)应该相当容易.

还有,有没有找出可见的"面孔"的功能?如果我想要一个填充的矢量立方体,那么我想我需要提取可见区域(基于距离/重叠?),然后将其绘制为X个填充多边形?毫无疑问,这些必须按深度排序,以免出现问题.

例如:

  • PointsToFaces(const a3dObject:T3dPointArray):TPolyFaceArray;
  • SortFaces(Const aFaces:TPolyFaceArray):TPolyFaceArray;

欢迎任何帮助!

delphi 3d graphics freepascal fpc

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

Free Discal中的内存泄漏是由带有'pointer'参数的方法引起的

使用ToBytes方法(见下文)将AnsiString的硬类型转换替换为TBytes(字符串数组)后,Delphi报告没有内存泄漏 - 但是,如果将TBytes值传递给具有a的方法,则Free Pascal 2.6.2会显示泄漏类型的参数Pointer.

以下代码泄漏内存:

program project1;

{$mode delphi}

uses
  SysUtils;

function ToBytes(const AValue: AnsiString): TBytes;
begin
  SetLength(Result, Length(AValue)); // <-- leak (ine 10)
  if Length(AValue) > 0 then
    Move(AValue[1], Result[0], Length(AValue));
end;

procedure Send(P: Pointer);
begin

end;

begin
  Send(ToBytes('test'));

  SetHeapTraceOutput('heaptrace.log');
end. 
Run Code Online (Sandbox Code Playgroud)

内存泄漏报告:

Call trace for block $001C5CC0 size 12   $00401586  TOBYTES,  line 10
of project1.lpr   $00401622  main,  line 21 of project1.lpr
Run Code Online (Sandbox Code Playgroud)

如果我将Send方法更改为采用TBytes类型的参数,则内存泄漏将消失.

memory-leaks freepascal fpc compiler-bug

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

在MIPS上免费使用Pascal for Android

试图将Delphi库移植到Android.免费Pascal支持Android/ARM - 可以使用Windows的预构建编译器.但是,Android NDK现在也支持MIPS和x86.FPC支持者的状态如何?目前,我的项目或多或少与CPU无关 - 本机位是为所有四种支持的体系结构构建的.不想放手.

我不是在Pascal的完整Android开发周期之后 - 只是一个没有I/O的算法库.我尝试用p2c将其翻译成C语言,但译者对来源进行了扼流.

我是否应该尝试使用Linux为相关CPU构建交叉编译器,然后链接到NDK库?

编辑:我已经从Android分支的源代码构建了针对Intel/Linux的交叉编译器.它工作,除了你必须调用ppcross386编译,而不是fpc.看起来,后者忽略-Tlinux选项并调用Intel/Win32编译器.

EDIT2:对makefile和源进行少量更改,MIPS交叉编译器构建.但是,随着构建转移到跨CPU RTL,它几乎立即出错.

android freepascal cross-compiling fpc android-ndk

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

Pascal编译器需要SecureZeroMemory功能吗?

考虑一下代码:

procedure DoSmthSecret;
var
  Seed: array[0..31] of Byte;

begin
// get random seed
  ..
// use the seed to do something secret
  ..
// erase the seed
  FillChar(Seed, SizeOf(Seed), 0);
end;
Run Code Online (Sandbox Code Playgroud)

代码的问题是:FillChar是编译器内在的,并且编译器可能会"优化它".问题是C/C++编译器所知,请参阅SecureZeroMemory.现代Pascal编译器(Delphi,FPC)可以进行这样的优化,如果可以的话,它们是否提供了与SecureZeroMemory等效的?

delphi pascal freepascal fpc

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

FreePascal RTTI.有没有办法调用方法?

我试图找出是否有办法做类似于Delphi的增强型RTTI功能.

据我所知,FPC不提供自Delphi 2010以来Delphi中出现的RTTI功能.但我想找到一些方法在运行时做一些技巧.

typinfo在FPC中使用单位我可以做以下事情:

  • 获取对象发布的属性列表 - getPropList来自typinfo单元;
  • 获取/设置Object的已发布属性的值 - 通过GetPropValue(...): Variant/ SetPropValue(...Value: Variant);
  • 获得发表的方法 - 通过MethodAddres;

但我还没有办法做一些事情,比如:

  • 呼叫方法;
  • 调用构造函数,或创建对象;

更新:构造函数的问题很像方法一 - 我希望有一种方法可以传递不同的参数:

// concept of code
type

TClass = class of TObject;

TMyClass1 = class
  public
    constructor Create(Param1: Integer; Param2: string); override;
  end;

TMyClass2 = class
  public
    constructor Create(ObjectParam: Object); override;
  end;

TParams = array of Variant;

var 
Classes: array of TClass 
Instances: array of Object;
ParamArray: array of TParams; …
Run Code Online (Sandbox Code Playgroud)

delphi runtime rtti fpc

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