我想知道如何仅使用安装了Lazarus的FPC(Pascal)而不使用Delphi语言(Object Pascsl)来开发GUI应用程序(32位)。谢谢。
我只是想知道如何在pascal中进行类型检查?我已经搜寻了几个小时,但找不到任何有用的东西。
例:
var
number: Integer;
begin
write('Enter a number: ');
read(number);
if {How am I supposed to check if 'number' is an Integer here?}
then writeln(number)
else writeln('Invalid input')
end.
Run Code Online (Sandbox Code Playgroud) 我正在使用fpc编译器,并且想删除此警告。我已经阅读了fpc的选项,但找不到该怎么做。这可能吗?它在我运行命令时出现:
fpc foo.pas
Run Code Online (Sandbox Code Playgroud)
出:
目标操作系统:Linux for i386编译foo.pas链接p2 / usr / bin / ld:警告:link.res包含输出节;你忘了-T吗?汇编79行,0.1秒
这是我第一次访问这个网站.通常,我在旧帖中找到回复没有问题,但我的实际问题没有成功.
我想知道如何使用RTTI函数在运行时知道Lazarus/FPC下记录的属性/成员?我知道如何为一个类(Tpersistent后代和已发布的属性)执行此操作,但不知道如何为FPC执行此操作.一些链接指示如何在Delphi(来自D2010)下进行,但我不知道如何在Lazarus下转置它.
在此先感谢您的帮助和帮助.Salim Larhrib.
凯文:正如我之前所说,这是我的第一个要求.但是我明白.你是对的.这是我的代码
procedure TMainForm.btRecordTHashListClick(Sender: TObject);
var
pTData : PTypeData;
pTInfo : PTypeInfo;
TablePtr : PatableRecord;
Loop : Integer;
begin
// Set of Record pointers + HashList
// Create Container
if not Assigned(FTableRecList) then FTableRecList := TFPHashList.Create;
// Insert data
new(TablePtr);
TablePtr^.description := 'Dictionnaire des tables.';
FTableRecList.add('atable', TablePtr );
new(TablePtr);
TablePtr^.description := 'Dictionnaire des fonctions.';
FTableRecList.add('afunction', TablePtr );
new(TablePtr);
TablePtr^.description := 'Dictionnaire des listes d''option.';
FTableRecList.add('alist', TablePtr );
// Read records
for Loop:=0 to FTableRecList.Count-1 do
begin
TablePtr …Run Code Online (Sandbox Code Playgroud) 我在Lazarus编程论坛上询问如何打开物理磁盘.我想允许用户在单击"选择磁盘"按钮时从系统中选择物理磁盘.Stack Overflow中有一些类似但不完全相同的示例(例如Delphi - 使用DeviceIoControl传递IOCTL_DISK_GET_LENGTH_INFO来获取闪存介质的物理大小(非分区)).
有很多C和C++使用的例子CreateFile(在文档中,特别是调用的例子DeviceIoControl)但我找不到任何Free Pascal或Delphi,我还不够好,我还没有找到如何做到这一点.
任何人都可以指向我解释它的链接的方向或更好仍然是用Delphi或Free Pascal编写的实际示例?任何人都可以帮我理解如何使用它吗?
如何将FPC .o从库链接到Delphi可执行文件.当我尝试链接以下代码时,我得到了一堆不满意的前向或外部声明.
library project1;
{$mode objfpc}{$H+}
uses
Classes
{ you can add units after this };
function Test: Integer;
begin
Result := -1;
end;
begin
end.
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$SYSTEM'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$OBJPAS'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$LNFODWRF'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$LNFODWRF'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$FPINTRES'
[dcc64 Error] Project2.dpr(170): …Run Code Online (Sandbox Code Playgroud) 首先,我想向您展示我的代码:
unit BSort;
{==============================================================================}
{$mode objfpc}{$H+}
{==============================================================================}
interface
{==============================================================================}
uses
Classes, SysUtils;
{==============================================================================}
type
TcompFunc = function(AValue1, AValue2 : Integer) : boolean;
TIntegerArray = array of integer;
PIntegerArray = ^TIntegerArray;
{==============================================================================}
procedure BubbleSort(var AMatrix : TIntegerArray; ACompFunc : TCompFunc);
function V1LargerV2(AValue1, AValue2 : Integer) : Boolean;
{==============================================================================}
implementation
{==============================================================================}
procedure Swap(var AValue1, AValue2 : Integer);
var
Tmp : Integer;
begin
Tmp := AValue1;
AValue1 := AValue2;
AValue2 := Tmp;
end;
{==============================================================================}
function V1LargerV2(AValue1, AValue2 : Integer) : Boolean;
begin
result …Run Code Online (Sandbox Code Playgroud) 是否可以将带有范围名称的Delphi单元移植MyLib.Classes.pas到FPC(版本2.6.0)而不重命名它以删除范围前缀MyLib.?
我正在将32位Delphi BASM代码移植到64位FPC(Win64目标操作系统),并想知道为什么下一条指令不能在64位FPC中编译:
{$IFDEF FPC}
{$ASMMODE INTEL}
{$ENDIF}
procedure DoesNotCompile;
asm
LEA ECX,[ECX + ESI + $265E5A51]
end;
// Error: Asm: 16 or 32 Bit references not supported
Run Code Online (Sandbox Code Playgroud)
可能的解决方法是:
procedure Compiles1;
asm
ADD ECX,ESI
ADD ECX,$265E5A51
end;
procedure Compiles2;
asm
LEA ECX,[RCX + RSI + $265E5A51]
end;
Run Code Online (Sandbox Code Playgroud)
我只是不明白LEAWin64目标中的32位指令有什么问题(它在32位Delphi中编译好,所以它是一个正确的CPU指令).
优化备注:
下一代码由64位FPC 2.6.2编译
{$MODE DELPHI}
{$ASMMODE INTEL}
procedure Test;
asm
LEA ECX,[RCX + RSI + $265E5A51]
NOP
LEA RCX,[RCX + RSI + $265E5A51]
NOP
ADD ECX,$265E5A51
ADD ECX,ESI
NOP
end;
Run Code Online (Sandbox Code Playgroud)
生成下一个汇编程序输出: …
fpc ×10
delphi ×5
freepascal ×5
lazarus ×4
pascal ×4
assembly ×1
basm ×1
delphi-xe5 ×1
interpreter ×1
ld ×1
linux ×1
shebang ×1