我使用的是 Lazarus 1.0.8(最新版本),并且已经安装了 Indy 10。我还有一个带有 PHP 脚本的网站,该脚本在服务器上保存一个文本文件(称为“stats.txt”)。我想使用我的程序上传另一个文本文件,其中包含统计文本+我在备忘录中写入的新文本。我不想让你为我编写代码,只是你能给我一个关于我该怎么做的建议吗?
我想我可以下载备忘录中“stats.txt”的内容,然后再次上传,但添加新文本。有没有更好的办法?
我正在使用以下单元尝试读取 Lazarus 项目中的应用程序版本号,但 GetProductVersion 始终返回 0.0.0.0
http://forum.lazarus.freepascal.org/index.php?topic=13957
我在 Windows 7 上使用 Lazarus 1.2.4 和 FPC 2.6.4。
当我编译、链接和运行应用程序时,我没有收到任何错误,因此看来该单元已正确包含...
我不知道还能去哪里寻找不起作用的东西。有人可以给我一些指点吗?
如果针对 32 位进行编译(使用适用的寄存器重命名),下面的代码可以正常工作。但它在执行时会抛出错误(并且“警告:目标文件“project1.o”包含到符号“.data.n_tc_p$project1_orbitkeyheader64$int64$longint$$int64_shufidx”的32位绝对重定位。”编译时)。
function SwapBytes64(const Val: Int64): Int64;
{$A 16}
const
SHUFIDX : array [0..1] of Int64 = ($0001020304050607, 0);
begin
asm
movq xmm0, rcx
pshufb xmm0, SHUFIDX // throws
movq rax, xmm0
end;
end;
Run Code Online (Sandbox Code Playgroud)
我该如何纠正这个问题(最好是对齐常数)。
编辑 我也尝试使用 movdqu。
答案 这是@Jester 答案的结果:
function SwapBytes64(const Val: Int64): Int64;
const
SHUFIDX : array [0..1] of Int64 = ($0001020304050607, 0);
begin
asm
movq xmm0, rcx
movdqu xmm1, [rip+SHUFIDX]
pshufb xmm0, xmm1
movq rax, xmm0
end;
end;
Run Code Online (Sandbox Code Playgroud)
这也有效,但没有明显的速度优势:
function SwapBytes64(const Val: Int64): Int64;
const …Run Code Online (Sandbox Code Playgroud) 我试图用帕斯卡(freepascal)定义一些东西。与在 C++ 中一样,您可以像这样传递变量定义宏:
#define REP(i,k) for(int i=0; i<k; i++)
Run Code Online (Sandbox Code Playgroud)
你怎么能用帕斯卡做到这一点?
我在第一行添加了{$MACRO ON}命令,因此它可以运行正常的定义,而不会出现类似{$define lala:='hello world'}.
但是当我尝试{define lala(i):=i}该程序时出现错误。
如何在 Pascal 定义中传递变量参数?
我需要将一段C代码翻译成Delphi/Pascal代码,但是我无法理解几行代码.
C代码:
static char* get_boundary(apr_pool_t* p, const char* ctype) {
char* ret = NULL ;
if ( ctype ) {
char* lctype = lccopy(p, ctype) ;
char* bdy = strstr(lctype, "boundary") ;
if ( bdy ) {
char* ptr = strchr(bdy, '=') ;
if ( ptr ) {
// what is the following line supposed to do?
bdy = (char*) ctype + ( ptr - lctype ) + 1;
// and this? I understand it's a loop, but *ptr and …Run Code Online (Sandbox Code Playgroud) 我不想让人们解释为什么以及怎么这样我才会跳进去.
我有一个包含原始字节数据的字节数组.该数组是1000个字节.我想通过1000字节的数组并仅提取可能类似于文件名的UTF-16 Unicode字符,但我不知道字符出现在1000字节数组中的确切位置.
我已经阅读了 Lazarus Unicode Page和这个,但我仍然不确定我的问题的语法方法.我知道Unicode字符大小最多可达4个字节,但通常是两个(字母和空格).
我已经使用UTF8encode(WideCharLenToString(@ MyArray,SomeIntValue)成功用于其他领域,我知道某些Unicode字符存在于我询问的这个线程中并且现在已经解决了.但我现在需要为它们"寻找"它们,因为一个不同的原因,在数组中.例如" 查看前16个字节.它们是Unicode吗?如果没有,请查看下一个16.它们是Unicode吗?如果是,请将它们转换为字符串并显示它们".
谁能帮我?
我想在Lazarus中创建一个绘图应用程序,但是我没有看到适当的控件,我可以在Deplhi中将其用作画布.它叫什么名字 ?
在pascal中,我敢于清理阵列的唯一方法就是简单地遍历它并清除它,但效率非常低.我不能简单地通过为它分配一个空数组来重新初始化它吗?
program arrays;
var
working, empty : array [1..10] of integer;
begin
working[3] := 5;
working:= empty;
end.
Run Code Online (Sandbox Code Playgroud)
可以这样做,这可能适得其反吗?
我在将Delphi BASM32代码移植到FPC时遇到了一个问题:
program MulTest;
{$IFDEF FPC}
{$mode delphi}
{$asmmode intel}
{$ELSE}
{$APPTYPE CONSOLE}
{$ENDIF}
function Mul(A, B: LongWord): LongWord;
asm
MUL EAX,EDX
end;
begin
Writeln(Mul(10,20));
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
上面的代码在Delphi XE中编译并按预期工作; FPC在线输出编译时错误MUL EAX,EDX:
错误:Asm:[mul reg32,reg32]操作码和操作数的无效组合
我正在使用Lazarus 1.4.4/FPC2.6.4 for Win32(当前稳定版)
任何解决方法或修复问题?
正在运行的示例非常简单易懂:
program Project1;
uses
SysUtils, Math;
var
fValue: double;
fValueMax: double;
begin
fValue := 7.0207503445953527;
fValueMax := Max(0, fValue);
writeln(fValue);
writeln(fValueMax);
readln;
end.
Run Code Online (Sandbox Code Playgroud)
然而,结果完全出乎意料.出于某种原因,Max函数不仅返回两个参数中的较大数字,还会更改其值.
在上面的示例代码中,fValueMax的预期值恰好是fValue,而fValueMax则更大.差异大约是E-7,如此之小,但仍然出乎意料并且崩溃了我的下面的代码(这里没有公布这个问题以保持问题的清晰和简单).