我正在尝试输出TByte的值作为其在AnsiString中的相应十六进制表示.
示例:TByte为0x4F AnsiString:"4F"(两个字符,一个4和一个F)
我知道StringOf函数,但转换为"映射"字符.
是否有任何体面的功能或有人知道如何快速实现这个功能?
非常感谢你提前:)
是否可以将带有范围名称的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)
生成下一个汇编程序输出: …
Delphi Xe,Win7x64
如何检测不完整的Windows版本N或K(Win XpSp3-Win7x64)?没有IE,Wmp.
例:
Function isWinKNedition:bool;
begin
result:=?????
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
if isWinKNedition then begin showmessage('This program can work only on full versions OS Windows');Halt;end;
end;
Run Code Online (Sandbox Code Playgroud) 昨天,我已经在我的embarcadero delphi 2010中安装了专为Delphi 7设计的TPing组件,但今天我发现当我点击"开始"按钮时,这个组件会导致我的应用程序因访问冲突错误而崩溃.
我在互联网上搜索导致访问语音问题的最常见原因,我发现了一些原因,其中包括安装与当前版本不兼容的软件包/组件.因此,我猜这个组件是我的访问冲突错误的原因.
请问您如何卸载组件/包.并恢复在安装过程中自动生成的备份.
我正在创建一个多线程应用程序,它创建了一个TThread类的动态数组,但对我而言,这是一个谜,它导致错误'访问冲突'到'创建'
代码表格:
Unit UNT_Main;
Interface
Uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, UNT_Socks;
Type
TFRM_Main = Class(TForm)
Procedure FormCreate(Sender: TObject);
Private
Procedure OnUpload(Success: Boolean; SockAction: TSockAction);
Public
{ Public declarations }
End;
Var
FRM_Main: TFRM_Main;
Socks: Array Of TSocks;
SA: Array Of TSockAction;
Implementation
{$R *.dfm}
Procedure TFRM_Main.OnUpload(Success: Boolean; SockAction: TSockAction);
Begin
ShowMessage(SockAction.Response);
End;
Procedure TFRM_Main.FormCreate(Sender: TObject);
Var
I: Integer;
Begin
SetLength(Socks, 5);
SetLength(SA, 5);
For I := 0 To High(Socks)-1 Do
Begin
SA[I].SUrl := 'http://google.com.co';
Socks[I].Create(SA[I]); …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的用户列表,每个用户都有它的ID,但是它的ID数字搞砸了,所以如果有人能告诉我如何按数字对用户进行排序,每个值都有这个表单
1:Stackoverflow
or
145000:Google
Run Code Online (Sandbox Code Playgroud)
如果我手动这样做,我想我会失去理智,因为有超过700000条记录.谢谢你的时间和帮助....
我正在将一个类移植到C++,并且需要在创建我的类的第一个实例之前执行一些初始化代码; 在main()获得控制之前执行代码适合我.如何在C++中做到这一点?
免费的Pascal文档声明该RawByteString类型是在Free Pascal中定义的,但我无法找到它.人们应该期望它在System单元中定义,就像在Delphi中一样,但是当我编译(使用FPC 2.6.2,{$ mode delphi})函数声明时
class function FromAnsi(const S: RawByteString): ByteArray; static;
Run Code Online (Sandbox Code Playgroud)
我得到编译器错误
Error: Identifier not found "RawByteString"
Run Code Online (Sandbox Code Playgroud)
我猜我可以自己声明这个类型:
type
RawByteString = type AnsiString(CP_NONE);
Run Code Online (Sandbox Code Playgroud)
但我想找到"原生"FPC声明.
谢谢你快速回答.由于我不需要支持FPC 1.x,我需要的解决方法是:
{$IFDEF FPC}
{$IF FPC_VERSION = 2}
{$IF FPC_RELEASE <= 6}
type
RawByteString = AnsiString;
{$IFEND}
{$IFEND}
{$ENDIF}
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(当前稳定版)
任何解决方法或修复问题?
Sphinx 中有多个指令可用于创建盒装文本,例如 ex.. note::或.. topic::,但它们都包含标题。是否可以创建没有标题的盒装文本?
这是我编写得很好的简单代码,但会引发访问冲突.它进入MD程序并且调试器显示一些X和Y值,但在退出程序AV后发生.希望有人能提供帮助.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure MD(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
form1.caption:= inttostr(x)+ ' '+ inttostr(y);
end;
procedure TForm1.FormCreate(Sender: TObject);
function MakeMethod(data, code: pointer): TMethod;
begin
result.Data:= data;
result.Code:= code;
end;
begin
panel1.OnMouseDown:= TMouseEvent(MakeMethod(nil, @MD));
end;
end.
Run Code Online (Sandbox Code Playgroud)
谢谢
我应该如何将此循环转换为for循环?
const
TheRightWord = 'hello';
MaximumTries = 3;
var
NTries : integer;
AWord : string;
begin
NTries := 1;
AWord := ' ';
while (AWord <> TheRightWord) and (NTries <= MaximumTries) do
Run Code Online (Sandbox Code Playgroud)
我以为这就是答案:
for (AWord <> TheRightWord) and (NTries <= MaximumTries) do
Run Code Online (Sandbox Code Playgroud)
我必须放在for原地while吗?或者是for i := 1 to 3 do吗?
delphi ×11
fpc ×4
basm ×2
delphi-2010 ×2
freepascal ×2
lazarus ×2
assembly ×1
byte ×1
c++ ×1
delphi-7 ×1
hex ×1
indy ×1
versioninfo ×1
winapi ×1