标签: freepascal

FreePascal初学者问题

我需要将一些代码从FreePascal移植到C.我是一名专业的C开发人员但对Pascal一无所知.大多数代码都可以轻松移植,但是一行代表让我很头疼.究竟应该做什么:

New(newBack); 
curBackPtr^ := newBack; 
curBackPtr := @(newBack^.next);
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的是,在没有被访问的情况下newBack分配给它curBackPtr并在其之后分配的事实.那么第一个任务是不是多余的,可以安全地删除?或者我在这里遗漏了什么?newBack.nextcurBackPtrcurBackPtr

pascal freepascal

3
推荐指数
1
解决办法
232
查看次数

使用 Free Pascal\Lazarus 解析大型二进制文件以获取特定值

我需要解析 RAM 转储以获取MFT记录(来自NTFS文件系统)。

我过去做过一些关于读取多个文件的标头(使用 FileSearcher 类等)的编程,但我不完全确定如何从大文件的开头开始读取,通读它,然后当找到某个值时,我需要从找到魔术值的点开始读取 1024 个字节(FILE0在 MFT 条目的情况下),并使用该值和 1024 字节范围末尾之间的值进行“操作” 。然后它需要继续搜索下一个FILE0记录。

到目前为止,我有以下内容 - 我的意图是它读取源文件(这是一个 TFileStream)以查找“FILE0”。当它找到它时,在这个阶段我只想报告它已经找到一条记录并输出位置,但在适当的时候我需要它从找到 FILE0 的点读取一系列字节:

type
    MFTRecordsStore = packed record
    FILE0MagicMarker: array[0..4] of byte;
    // Lots more follow....
end;

var
    MFTHeaderArray : MFTRecordsStore;
    FILE0Present : string;
    i : integer;

begin
    SourceFile.Position := 0;
    while (SourceFile.Position < SourceFile.Size) do
        begin
            SourceFile.ReadBuffer(MFTHeaderArray, SizeOf(MFTHeaderArray));
            for i := 0 to 4 do
                FILE0Present := FILE0Present + IntToHex(MFTHeaderArray.FILE0MagicMarker[i], 2);
                if FILE0Present = 'FILE0' …
Run Code Online (Sandbox Code Playgroud)

freepascal while-loop eof lazarus

3
推荐指数
1
解决办法
4063
查看次数

如何搜索"StringA"的字节数组?

使用FreePascal(或Delphi,如果没有FP示例),给定一个2048字节的缓冲区作为"字节数组",如何在缓冲区中搜索"StringA"?

var
Buffer : array[1..2048] of byte;
...
  repeat
      i := 0;
      BlockRead(SrcFile, Buffer, SizeOf(Buffer), NumRead);      
      // Now I want to search the buffer for "StringA"? 
...
Run Code Online (Sandbox Code Playgroud)

谢谢

arrays delphi byte freepascal

3
推荐指数
1
解决办法
1680
查看次数

Indy10 Free Pascal

我尝试按照安装Indy10和Lazarus的说明进行操作.下载Indy 10下载后,使用正确的密码我只看到Delphi代码,没有名为lazarus或freepascal的文件夹.Indy10的Lazarus版本已被删除吗?

delphi freepascal indy lazarus indy10

3
推荐指数
1
解决办法
456
查看次数

用FPC编写Scheme解释器:递归数据结构

本质上,这是关于Pascal(FPC)中的递归数据结构的问题.正如我想在SICP第4章中所示实现一个Scheme解释器,这个问题也可能与Schemers有关.:)

S表达式应表示为标记数据.到目前为止,我已经构建了一个变体记录,它代表了数字和对.希望代码是可读的和不言自明的:

program scheme;

type
   TTag = (ScmFixnum, ScmPair);
   PScmObject = ^TScmObject;
   TScmObject = record
      case ScmObjectTag: TTag of
         ScmFixnum: (ScmObjectFixnum: integer);
         ScmPair: (ScmObjectCar, ScmObjectCdr: PScmObject);
      end;

var
   Test1: TScmObject;
   Test2: TScmObject;
   Test3: TScmObject;

function MakeFixnum(x: integer): TScmObject;
var
   fixnum: TScmObject;
begin
   fixnum.ScmObjectTag := ScmFixnum;
   fixnum.ScmObjectFixnum := x;
   MakeFixnum := fixnum;
end;

function MakePair(car, cdr: PScmObject): TScmObject;
var
   pair: TScmObject;
begin
   pair.ScmObjectTag := ScmPair;
   pair.ScmObjectCar := car;
   pair.ScmObjectCdr := cdr;
   MakePair := pair;
end;

begin
   Test1 := MakeFixnum(7);
   writeln('Test1, Tag: …
Run Code Online (Sandbox Code Playgroud)

delphi scheme pascal freepascal sicp

3
推荐指数
1
解决办法
372
查看次数

Delphi:应该手动释放PChar数组的已分配元素吗?

请考虑以下代码:

procedure Test;
var
  MyPCharArray: array of PChar;

begin
  SetLength(MyPCharArray, 3);

  GetMem(MyPCharArray[0], 5);
  GetMem(MyPCharArray[1], 5);
  GetMem(MyPCharArray[2], 5);

  StrCopy(MyPCharArray[0], 'test');
  StrCopy(MyPCharArray[1], 'abcd');
  StrCopy(MyPCharArray[2], '1234');

  // Are these necessary?
  FreeMem(MyPCharArray[0], 5);
  FreeMem(MyPCharArray[1], 5);
  FreeMem(MyPCharArray[2], 5);
end;
Run Code Online (Sandbox Code Playgroud)

是否应手动释放已分配的元素,否则编译器将在MyPCharArray超出范围时自动释放数组元素?

delphi freepascal

3
推荐指数
1
解决办法
852
查看次数

Pascal Synapse错误处理

我有一些用Lazarus / FreePascal编写的使用Synapse IMAPSend库单元的代码。我尝试通过SSL(IMAPS)登录到IMAP服务器,但调用Login失败。

我试过检查异常-没有抛出异常。

除了与适当的服务器和端口的TCP三向握手之外,Wireshark没有显示任何内容。

这是代码

function GetImapResponse(host, port, user, pass:String): String;
var
  response: String = '';
  imap: TIMAPSend;
  no_unseen: integer;
begin
  imap := TIMAPSend.create;
  try
    imap.TargetHost := host;  //'10.0.0.16';
    imap.TargetPort := port;  //'993';
    imap.UserName := user;    //'red';
    imap.Password := pass;    //'********';
    imap.AutoTLS := false;
    imap.FullSSL := true;
    response := response + 'IMAP login to '+user+'@'+host+':'+port+' ... ';
    if imap.Login then
    begin
      response := response + 'Logged in OK. ';
      // How many …
Run Code Online (Sandbox Code Playgroud)

delphi exception-handling freepascal lazarus

3
推荐指数
1
解决办法
1970
查看次数

Lazarus FPC在ASM中拒绝64位AND运算

以下内容无法编译:

and rax, $7FFFFFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

我已经尝试将值设为常量,甚至将其作为qword投射,但编译器会抛出"dword值超出界限".

当然,这是一个qword,而不是dword.如何让编译器实现这一点?

请注意,64位代码正在编译并正确运行.

我有最新的Lazarus版本.

assembly freepascal x86-64 lazarus

3
推荐指数
1
解决办法
137
查看次数

为什么属性默认值在 free pascal 中不起作用?

我想要默认的 http 错误代码 500。

我不能覆盖构造函数(我找到了一些关于它的文档,但编译器说There is no method in an ancestor class to be overridden: "constructor HttpError.Create(const AnsiString);

我试图添加Default 500到状态属性定义,但它也不起作用(我看到 0)。

500默认情况下,我如何为状态实现价值?

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}

program test;

uses
  SysUtils;

Type
  {:Base http exception}
  HttpError = class(Exception)
  private
    FStatus: Integer;
  published
    property Status: Integer Read FStatus Write FStatus Default 500;
  end;

begin
  try
    Raise HttpError.Create('Ooops');
  except
    on e: HttpError do
      WriteLn(e.Status);
  end;
end.
Run Code Online (Sandbox Code Playgroud)

freepascal

3
推荐指数
1
解决办法
875
查看次数

在Delphi程序中使用CUDA调用运行C函数

我的目标是有一个Delphi(或freepascal)代码,它将像这样调用C函数func:

C/Cuda文件:

/* this is the "progcuda.cu" file */
#include <stdio.h>

__global__ void foo(int *a, int *b, int *c, int n){
    /*
    add all the vector's element
    */
}


void func(int *a, int *b, int *c,int n){
    int *da,*db,*dc;
    cudaMalloc(&da, n*sizeof(int));
    cudaMalloc(&db, n*sizeof(int));
    cudaMalloc(&dc, n*sizeof(int));

    cudaMemcpy(da,a,sizeof(int)*n,cudaMemcpyHostToDevice);
    cudaMemcpy(db,b,sizeof(int)*n,cudaMemcpyHostToDevice);
    cudaMemcpy(dc,c,sizeof(int)*n,cudaMemcpyHostToDevice);

    foo<<<1,256>>>(da,db,dc);
    cudaMemcpy(c,dc,sizeof(int),cudaMemcpyDeviceToHost);

    /* do other stuff and call another Host and Device functions*/

    return;
}
Run Code Online (Sandbox Code Playgroud)

pascal主文件:

// this is the "progpas.pas" file
program progpas;
{$mode objfpc}{$H+}
uses unitpas;

var
    ... …
Run Code Online (Sandbox Code Playgroud)

c cuda freepascal

3
推荐指数
1
解决办法
388
查看次数

标签 统计

freepascal ×10

delphi ×5

lazarus ×4

pascal ×2

arrays ×1

assembly ×1

byte ×1

c ×1

cuda ×1

eof ×1

exception-handling ×1

indy ×1

indy10 ×1

scheme ×1

sicp ×1

while-loop ×1

x86-64 ×1