标签: freepascal

如何使用CreateFile访问物理磁盘?

我在Lazarus编程论坛上询问如何打开物理磁盘.我想允许用户在单击"选择磁盘"按钮时从系统中选择物理磁盘.Stack Overflow中有一些类似但不完全相同的示例(例如Delphi - 使用DeviceIoControl传递IOCTL_DISK_GET_LENGTH_INFO来获取闪存介质的物理大小(非分区)).

有很多C和C++使用的例子CreateFile(在文档中,特别是调用的例子DeviceIoControl)但我找不到任何Free Pascal或Delphi,我还不够好,我还没有找到如何做到这一点.

任何人都可以指向我解释它的链接的方向或更好仍然是用Delphi或Free Pascal编写的实际示例?任何人都可以帮我理解如何使用它吗?

delphi freepascal lazarus fpc

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

遍历多个子串实例的字符串 - freepascal或delphi

平台:Lazarus 1.1,FreePascal 2.7.1,Win 7 32位.

我有一个字符串值如下:

FileName[12345][45678][6789].jpg
Run Code Online (Sandbox Code Playgroud)

默认情况下(假设这是默认行为0),我的程序当前从最后一对方括号中取出最后一组数字到文件名的最右边,即6789.它使用以下代码:

if chkbxOverrideUniqueID.Checked then
   IDOverrideValue := StrToInt(edtToggleValue.Text);   
// User is happy to find the right most unique ID
if not chkbxOverrideUniqueID.Checked then      
  LastSquareBracket := RPos(']', strFileName);
  PreceedingSquareBracket := RPosEx('[', strFileName, LastSquareBracket) + 1;
  strFileID := AnsiMidStr(strFileName, PreceedingSquareBracket, LastSquareBracket - PreceedingSquareBracket)
else // User doesn't want to find the rightmost ID. 
  // and now I am stuck! 
Run Code Online (Sandbox Code Playgroud)

但是,我现在为用户添加了一个指定非默认行为的选项.例如,如果他们输入'1',则表示"从最右边的ID中查找第一个ID".例如[45678],因为[6789]是默认行为0,请记住.如果他们输入2,我希望它找到[12345].

我的问题:我如何调整上述代码才能实现这一目标?

freepascal lazarus

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

将字符串变量写入剪贴板

我马上就承认,至少可以说,我是帕斯卡尔缺乏经验的.所以,我能得到的任何帮助将不胜感激.:)

作为更大程序的一部分,我需要将一个字符串变量写入剪贴板.我在Lazarus(版本1.0.12)中创建了一个新项目,所以我可以尝试弄清楚如何在没有由额外的,不必要的代码引起的复杂性的情况下这样做,我在下面包含了这些:

program varToClipboard;

uses Clipbrd;

var
    textToCopy:string;

begin
    textToCopy := 'Test text from Pascal';

    Clipboard.AsText := textToCopy;
end.  
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,以及所需的LCLBase依赖项,我在运行编译的EXE时在CMD中收到以下错误:

An unhandled exception occurred at $000000000043D45E :
EAccessViolation : Access violation
  $000000000043D45E  CLIPBOARDREGISTERFORMAT,  line 98 of ./include/lclintf.inc
  $000000000043C35B  PREDEFINEDCLIPBOARDFORMAT,  line 185 of lclintf.pas
  $0000000000415B0C  TCLIPBOARD__SETASTEXT,  line 452 of ./include/clipbrd.inc
  $0000000000401802  main,  line 12 of varToClipboard.lpr
Run Code Online (Sandbox Code Playgroud)

根据文档,我似乎做得很对.尽管如此,我发现文档缺乏时间.

 

另外,我必须做什么才能运行已编译的EXE(只生成并将字符串写入剪贴板)而不会弹出控制台窗口?

clipboard pascal freepascal lazarus

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

如何设置枚举类型的值?

我有以下内容:

TDirection = (dirNorth, dirEast, dirSouth, dirWest);
TDirections = set of TDirection;
Run Code Online (Sandbox Code Playgroud)

在一个单独的类中,我将它声明为属性:

property Directions: TDirections read FDirections write FDirections;
Run Code Online (Sandbox Code Playgroud)

我想要的是能够像对待布尔人一样对待它们,所以例如如果dirNorth是真的那么它将是1,如果是假的话0.

我想把它想象成 (1,0,0,0)

我想检查方向是否为True,我可以使用:

var
  IsTrue: Boolean;
begin
  IsTrue := (DirNorth in Directions);
Run Code Online (Sandbox Code Playgroud)

不确定上述是否正确,但我的另一个问题是如何更改其中一个方向TrueFalse

我现在达到了我的一个混乱状态:(

这是我尝试设置值的最后一件事,但我得到的是Illegal Expression(在Lazarus中).

Directions(TDirection(DirNorth)) := True;
Run Code Online (Sandbox Code Playgroud)

delphi freepascal lazarus delphi-xe

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

Inno Setup-没有64位数据类型?

“ Inno-Setup编译器”不知道pascal数据类型“ QWord”。是否有64位等效项?

谢谢

installer pascal inno-setup freepascal

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

Delphi相当于Free Pascal的FPC定义?

是否有编译器定义,告诉源代码是否使用delphi编译,在等同于Free Pascal中的FPC定义的意义上?

我正在开发一个应该兼容三个Pascal编译器的单元(Lazarus/Free Pascal,Delphi和winsoft PocketStudio).编译器之间存在一些差异,因此我想在编译器特定版本中提供代码的一些关键部分.

对于免费Pascal,我可以写

{$IFDEF FPC}
  DoSomething;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

但是Delphi的等价物是什么?

delphi pascal freepascal lazarus

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

将FPC .o文件链接到Delphi

如何将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)

delphi freepascal fpc delphi-xe5

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

无法进入关键部分

为什么没有睡眠(1)进入临界区是不可能的?

type
  TMyThread = class(TThread)
  public
    procedure Execute; override;
  end;

var
  T: TMyThread;
  c: TRTLCriticalSection;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  InitializeCriticalSection(c);
  T := TMyThread.Create(false);
end;

procedure TMyThread.Execute;
begin
  repeat
    EnterCriticalSection(c);
    Sleep(100);
    LeaveCriticalSection(c);
    sleep(1);  // can't enter from another thread without it
  until false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnterCriticalSection(c);
  Caption := 'entered';
  LeaveCriticalSection(c);
end; 
Run Code Online (Sandbox Code Playgroud)

由于代码太多而无法发布此文本文本文本文本文本.哦,顺便说一下,如果该部分是由线程创建的,那么它工作正常.

winapi multithreading freepascal critical-section

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

为什么这个C到Pascal的转换崩溃?

我有这个C代码:

/*
  WARNING:  The order of this table must also match the order of a table
  located in AcquireResizeFilter() in "resize.c" otherwise the users filter
  will not match the actual filter that is setup.
*/
typedef enum
{
  UndefinedFilter,
  PointFilter,
  BoxFilter,
  TriangleFilter,
  HermiteFilter,
  HannFilter,
  HammingFilter,
  BlackmanFilter,
  GaussianFilter,
  QuadraticFilter,
  CubicFilter,
  CatromFilter,
  MitchellFilter,
  JincFilter,
  SincFilter,
  SincFastFilter,
  KaiserFilter,
  WelchFilter,
  ParzenFilter,
  BohmanFilter,
  BartlettFilter,
  LagrangeFilter,
  LanczosFilter,
  LanczosSharpFilter,
  Lanczos2Filter,
  Lanczos2SharpFilter,
  RobidouxFilter,
  RobidouxSharpFilter,
  CosineFilter,
  SplineFilter,
  LanczosRadiusFilter,
  CubicSplineFilter,
  SentinelFilter  /* a count of all the filters, not a …
Run Code Online (Sandbox Code Playgroud)

delphi pascal freepascal

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

如何在Indy SSL中设置ConnectTimeout / ReadTimeout

使用SSL时如何在Indy中设置ConnectTimeout / ReadTimeout?

MCVE:

program mcve;

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}SysUtils, IdHTTP, IdSSLOpenSSL, DateUtils;

var
  HTTP    : TIdHTTP;
  SSL     : TIdSSLIOHandlerSocketOpenSSL;
  Started : TDateTime;
begin
  HTTP := TIdHTTP.Create();
  try
    HTTP.ReadTimeout            := 1000;
    HTTP.ConnectTimeout         := 2000;
    SSL                         := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
    SSL.ConnectTimeout          := HTTP.ConnectTimeout;
    SSL.ReadTimeout             := HTTP.ReadTimeout;
    SSL.SSLOptions.SSLVersions  := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    HTTP.IOHandler              := SSL;
    Started := Now;
    try
      HTTP.Get(ParamStr(1));
    except
      On E: Exception do WriteLn(E.Message);
    end;
    Writeln(FormatDateTime('hh:nn:ss', SecondsBetween(Started, Now) / SecsPerDay));
  finally
    HTTP.Free;
  end;
end.
Run Code Online (Sandbox Code Playgroud)

使用httpConnectTimeout / ReadTimeout时,只有在使用时,此问题才能解决https …

delphi freepascal indy lazarus

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