标签: freepascal

将Free Pascal编译成AVR,ATMega和Arduino会涉及什么?

FPC编译到Arduino平台是否需要付出太多努力?

我真的很想用Lazarus做一些"草图".

compiler-construction freepascal arduino lazarus fpc

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

OpenCV指向位图处理的指针

我已经创建了一个从Delphi/Lazarus应用程序加载的轮廓检测共享库.主应用程序将指针传递给位图,该指针由库内的函数处理.

这是库中的功能.参数"img"是指向我的位图的指针.

extern "C" {

  void detect_contour(int imgWidth, int imgHeight, unsigned char * img, int &x, int &y, int &w, int &h)
  {
    Mat threshold_output;
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;

    Mat src_gray;
    int thresh = 100;
        int max_thresh = 255;
    RNG rng(12345);

    /// Load source image and convert it to gray
    Mat src(imgHeight, imgWidth, CV_8UC4);
    int idx;

    src.data = img;

    /// Convert image to gray and blur it
    cvtColor( src, src_gray, CV_BGRA2GRAY );

    blur( src_gray, src_gray, Size(10,10) );

    /// Detect …
Run Code Online (Sandbox Code Playgroud)

c++ delphi opencv freepascal lazarus

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

在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
查看次数

Delphi和Lazarus之间表单初始化的差异?

MainForm在运行时创建一些辅助Frame对象以显示各种选项面板.

这是其中一个框架类的典型构造函数(它们各自扩展TFrame):

constructor Tframe2.Create(AOwner: TComponent);
begin
    inherited;
    edTime.Text := '12:00pm'; //edTime is a TEdit control. this line is where it throws the exception
    //etc.
end;
Run Code Online (Sandbox Code Playgroud)

这段代码在Delphi中运行良好(无论是否是正确的方法),但Lazarus中的相同代码不断抛出EInvalidOperation异常,因为控件(TEdit)尚未分配父"窗口"(rsControlHasNoParentWindow),当我检查代码时,这实际上是有意义的,因为在调用构造函数之后,父级似乎没有被分配.

这是MainForm中的代码初始化辅助框架:

if Assigned(frame) then FreeAndNil(frame);
case Node.AbsoluteIndex of
    optInterval: frame := Tframe2.Create(Self); //here's where the constructor gets called.
    //etc
end;
frame := TframeOther.Create(Self); 
if Assigned(frame) then
begin
    frame.Parent := panOptions; //here's where Tframe2's parent gets set
    frame.Align := alClient;
end;  
Run Code Online (Sandbox Code Playgroud)

那么有人可以解释Delphi和Lazarus之间在表单初始化序列方面是否存在任何重要差异?

那么解决这种初始化顺序问题的最标准方法是什么?与我更熟悉的其他语言相比,可能有不同的策略来解决此类错误.我可以在构造函数中添加另一个参数,或者如果有一个方法被调用post构造函数在屏幕上预先绘制它我可以覆盖我可以重新定位该代码,或者只是创建一个辅助方法并在调用setParent之后调用它.有什么特别的最佳做法吗?

编辑]:看来这可能是某种特定的TEdit.看起来初始化复选框状态的行没有相同的问题.这可能只是拉撒路的一个错误吗?

delphi freepascal lazarus

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

如何在Lazarus中切换Win32/64代码?

我安装了64位Lazarus并希望生成32位代码.当我尝试将目标操作系统设置为Win32时,我收到错误消息

编译器"C:\ Programs\lazarus\fpc\2.6.0\bin\x86_64-win64\fpc.exe"不支持目标x86_64-win32

所以我想我需要下载并安装额外的fpc编译器来生成Win32代码,并以某种方式在Lazarus IDE中切换它们.

做正确的方法是什么?

delphi freepascal lazarus 32bit-64bit

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

获取鼠标光标下的像素颜色 - 快速方式

有没有什么方法可以真正快速地获得鼠标光标下的像素颜色?我有一个鼠标钩,我尝试在鼠标移动期间读取像素颜色。它是一种 ColorPicker

任何使用 getPixel 和 BitBlt 的尝试都非常慢。

更新 - 添加代码

unit Unit1;

{$mode delphi}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, lclintf, Windows;

type

  { TForm1 }

  TForm1 = class(TForm)
    pnColor: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ms(var message: tmessage); message WM_USER+1234;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  DC:HDC;

    const WH_MOUSE_LL = 14; //for Lazarus

implementation

{$R *.lfm}

{ TForm1 }

procedure HookMouse(Handle:HWND); stdcall; external 'mhook.dll';
procedure …
Run Code Online (Sandbox Code Playgroud)

winapi freepascal lazarus

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

无法在Windows 7 64位上读取最后几个Kb的逻辑驱动器

我在处理逻辑驱动器时遇到了一些问题.为清楚起见,无论分区如何,我对"物理磁盘"(PD)的定义都是原始磁盘."逻辑驱动器"(LD)指的是诸如驱动器E:,驱​​动器F:等的卷.

使用RRUZ(我的英雄SO成员)中的示例并实现WMI类我已经创建了一个用于读取磁盘的Freepascal程序.我通过\.\ PhyscialDiskX解决了PD问题,RRUZ(这里)创建的示例工作得很好.我可以读取PD的所有字节没有问题.

我对逻辑卷使用相同的句柄技术,它是\?\ E:或\?\ F:等.然后我使用IOCTL_DISK_GET_LENGTH_INFO来获取PD或LV的长度,然后读取字节范围,直到ReadBytes = TotalLength.我在MSDN网站上看到,它将自动检索传递的任何设备句柄的大小 - PD或LD都一样.事实上,我已经检查了我的程序returnzt WinHex,FTK Imager,HxD和其他几个低级磁盘工具返回的szie值.除了由0或1个起始位置引起的1字节差异外,它们匹配.

但是,出于某种原因,我的程序无法在Windows 7 Pro 64位上获得最终的32Kb,尽管以管理员身份运行该程序.它读取整个磁盘,然后读取最终缓冲区(以64Kb缓冲区完成)BytesRead返回-1.使用调试器我计算出以下值:

493,846,527 exact LV size of Drive F:
493,813,760 total bytes read at time of failure
32,767 bytes missing
Run Code Online (Sandbox Code Playgroud)

结果如下

BytesRead    := FileRead(hDiskHandle, Buffer, (DiskSize - TotalBytesRead));
Run Code Online (Sandbox Code Playgroud)

在最终缓冲区读取时为-1.这是测试磁盘末尾的行,通过说"如果剩余读取的数量小于缓冲区大小的大小,则只尝试读取剩余的内容".因此,FileRead最后要求存储的字节值为32,767(因为此时的DiskSize - TotalBytesRead为32,767,这意味着要读取磁盘的剩余字节数).指定大小的缓冲区为64Kb.我的理解是你可以减少缓冲区而不是更多(FileRead状态:" 缓冲区必须至少是Count字节长.不执行检查 "?这是正确的吗?如果不是那么这可能是(也可能是)这个问题.

我不知道是不是因为IOCTL_DISK_GET_LENGTH_INFO,缓冲存储还是别的什么?希望有人能帮忙吗?我还在Lazarus Freepascal论坛上贴了一些截图.这是我的相关代码部分:

手柄:

// Create handle to source disk. Abort if fails
  hSelectedDisk := CreateFileW(PWideChar(SourceDevice), FILE_READ_DATA,
                   FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, …
Run Code Online (Sandbox Code Playgroud)

delphi wmi freepascal lazarus

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

FPC BASM32 POP bug?

Delphi和FPC BASM之间的另一个差异:

program PopTest;

{$IFDEF FPC}
  {$mode delphi}
  {$asmmode intel}
{$ELSE}
  {$APPTYPE CONSOLE}
{$ENDIF}

var
  B: LongWord;

procedure Pop(A: LongWord; var B: LongWord);
asm
         PUSH   EAX
         POP    [EDX]
end;

begin
  Pop(5, B);
  Writeln(B);
  Readln;
end.
Run Code Online (Sandbox Code Playgroud)

这个32位代码在Delphi XE中按预期工作,并在FPC中产生访问冲突(2.6.4)

调试显示POP指令(在FPC编译器中)弹出一个单词而不是预期的双字,从而破坏堆栈和过程的返回地址.解决方案是

procedure Pop(A: LongWord; var B: LongWord);
asm
         PUSH   EAX
         POP    DWORD [EDX]
end;
Run Code Online (Sandbox Code Playgroud)

这实际上是更好的代码,因为它消除了参数大小歧义.

错误与否?

delphi freepascal fpc basm

6
推荐指数
0
解决办法
138
查看次数

OSX 应用程序崩溃:代码签名无效

我有一个在 AppStore 之外分发的 OSX 应用程序。因此,我使用相应的证书(开发人员 ID 应用程序证书)对其进行签名。

该应用程序本身是用 Freepascal (Lazarus) 编写的,并且有一个用 C++ 编写的依赖库,我也签署了该库。我还通过使用 install_name_tool 并在路径前加上@loader_path 将 lib 的路径更改为相对于应用程序。在当地对我来说就像一种魅力。

该应用程序(据我所知)在 OSX 10.11.6 上运行正常,但在 OSX 10.10.5 上崩溃,说:库未加载:@loader_path/libMyAPP.dylib 引用自:/Users/USER/Downloads/MyAPP.app/目录/MacOS/MyAPP 原因:找不到合适的图像。确实发现:/Users/Steve/Downloads/MyAPP.app/Contents/MacOS/libMyAPP.dylib: 代码签名对“/Users/Steve/Downloads/MyAPP.app/Contents/MacOS/libMyAPP.dylib”无效

/Users/Steve/Downloads/MyAPP.app/Contents/MacOS/libMyAPP.dylib:“/Users/Steve/Downloads/MyAPP.app/Contents/MacOS/libMyAPP.dylib”的代码签名无效

任何指示可能会发生什么?这真的是代码签名问题还是其他问题?谢谢。

macos freepascal code-signing objective-c lazarus

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

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
查看次数