如果你想使用方法的指针作为参数,你需要像这样type的方法function of object工作良好:
type TAcceptor = function(filename:string):boolean of object;
function acceptor(filename:string):boolean;
begin
result := filename <> '';
end;
Run Code Online (Sandbox Code Playgroud)
如果你想使用子方法的指针怎么办?它不起作用:
procedure TForm1.Button1Click(Sender:TObject);
function acceptor(filename:string):boolean of object;
begin
result := filename <> '';
end;
begin
end;
Run Code Online (Sandbox Code Playgroud)
出现错误:; expected but OF found!
问题:是否有子功能指针?我可以施展吗?
为什么在将数字除以零时有如此不同的答案:
我的代码:
class Test {
public static void main(String[] args){
int a = (int)(3/0.0F);
System.out.println(a);
System.out.println(3/0.0F);
System.out.println(3/0);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
2147483647
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
Run Code Online (Sandbox Code Playgroud)
每当我将一个数字除以一个整数(byte,short,int,long)时,它就会抛出ArithmeticException,这与使用实数(float,double)完成时不同.为什么?
我正在尝试将javascript代码转换为delphi,但我失败了......
这是javascript代码:
/* generate random progress-id */
var uuid = "";
var i;
for (i = 0; i < 32; i++) {
uuid += Math.floor(Math.random() * 16).toString(16);
}
Run Code Online (Sandbox Code Playgroud)
这是我在delphi中的尝试:
function uid :string ;
var
i :integer;
begin
for I := 0 to 31 do begin
result := result + inttostr(floor(random * 16));
end;
end;
Run Code Online (Sandbox Code Playgroud)
这是java脚本代码的结果
a638aa8f74e2654c725fd3cdcf2927d3
Run Code Online (Sandbox Code Playgroud)
我在德尔福的知识是有限的,所以我不知道该怎么做..
我希望看到一些帮助,并从中学习.
编辑我的问题.
我会具体的.
我如何声明下面的代码const而不是var?(我无法获得Cube示例)
var
Matrix : array of array of string;
SetLength(Matrix, 8, 8);
Matrix[0,0]:='A0';Matrix[0,1]:='A1';Matrix[0,2]:='A2';Matrix[0,3]:='A3';Matrix[0,4]:='A4';Matrix[0,5]:='A5';Matrix[0,6]:='A6';Matrix[0,7]:='A7';
Matrix[1,0]:='B0';Matrix[1,1]:='B1';Matrix[1,2]:='B2';Matrix[1,3]:='B3';Matrix[1,4]:='B4';Matrix[1,5]:='B5';Matrix[1,6]:='B6';Matrix[1,7]:='B7';
Matrix[2,0]:='C0';Matrix[2,1]:='C1';Matrix[2,2]:='C2';Matrix[2,3]:='C3';Matrix[2,4]:='C4';Matrix[2,5]:='C5';Matrix[2,6]:='C6';Matrix[2,7]:='C7';
Matrix[3,0]:='D0';Matrix[3,1]:='D1';Matrix[3,2]:='D2';Matrix[3,3]:='D3';Matrix[3,4]:='D4';Matrix[3,5]:='D5';Matrix[3,6]:='D6';Matrix[3,7]:='D7';
Matrix[4,0]:='E0';Matrix[4,1]:='E1';Matrix[4,2]:='E2';Matrix[4,3]:='E3';Matrix[4,4]:='E4';Matrix[4,5]:='E5';Matrix[4,6]:='E6';Matrix[4,7]:='E7';
Matrix[5,0]:='F0';Matrix[5,1]:='F1';Matrix[5,2]:='F2';Matrix[5,3]:='F3';Matrix[5,4]:='F4';Matrix[5,5]:='F5';Matrix[5,6]:='F6';Matrix[5,7]:='F7';
Matrix[6,0]:='G0';Matrix[6,1]:='G1';Matrix[6,2]:='G2';Matrix[6,3]:='G3';Matrix[6,4]:='G4';Matrix[6,5]:='G5';Matrix[6,6]:='G6';Matrix[6,7]:='G7';
Matrix[7,0]:='H0';Matrix[7,1]:='H1';Matrix[7,2]:='H2';Matrix[7,3]:='H3';Matrix[7,4]:='H4';Matrix[7,5]:='H5';Matrix[7,6]:='H6';Matrix[7,7]:='H7';
Run Code Online (Sandbox Code Playgroud) 我试图cmd从Delphi 使用以应用一些命令。我使用以下代码
ShellExecute(Application.handle, 'runas', 'cmd.exe',
PChar('/c command to do '), nil, SW_show);
Run Code Online (Sandbox Code Playgroud)
我想在同一执行中运行多个命令
/c command1 command2 command3
Run Code Online (Sandbox Code Playgroud)
我已经制作了一个bat文件来运行一些命令。但是我不喜欢在项目中存储蝙蝠的想法。我可以在一个执行中应用多个命令吗?能做到吗?
我试图用帕斯卡(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 定义中传递变量参数?
我可以通过[Reflection.Assembly]::LoadFile()方法直接在Powershell中使用我在Delphi(Delphi 10)中创建的DLL 吗?我正在尝试,但得到错误:
使用"1"参数调用"LoadFile"的异常:"模块应该包含一个程序集清单.
我能够将Delphi DLL包装在我用C#编写的DLL中并以这种方式使用它,但不愿意,因为它意味着为每个更改而不是一个更改编译两个项目.
这是我目前在Delphi DLL中的代码:
library TestDLL;
procedure TestCall(foo: PChar); stdcall;
begin
end;
exports
TestCall;
begin
end.
Run Code Online (Sandbox Code Playgroud) 有没有在Delphi 7内置函数返回一个TSize从给定cx和cy参数?
一些类似的功能Rect()和Point()等...
我知道写我自己很简单(虽然它Size已经是一个别名,TSize所以我不能说出我的功能Size).但我想知道RTL中是否有内置函数.
这可能是我之前问题的延伸.
我已经理解基于接口的变量不能被定义为其原始类型,否则引用计数不能正常用于自动释放.
但是如果一个类实现了两个接口,那么在创建它的实例时应该定义什么类型?
考虑以下代码:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils, Classes;
type
ITestInterface = interface(IInvokable)
['{A7BDD122-7DC6-4F23-93A2-B686571AB2C8}']
procedure TestMethod;
end;
IAnotherInterface = interface(IInvokable)
['{15FEC4A7-E361-41D0-9D52-170AFAD1794B}']
procedure AnotherMethod;
end;
TTestObj = class(TInterfacedObject, ITestInterface, IAnotherInterface)
constructor Create;
destructor Destroy; override;
private
FData: TStrings;
public
procedure TestMethod;
procedure AnotherMethod;
end;
{ TTestObj }
constructor TTestObj.Create;
begin
FData := TStringList.Create;
end;
destructor TTestObj.Destroy;
begin
Writeln('Destroy');
FData.Free;
inherited;
end;
procedure TTestObj.TestMethod;
begin
FData.Text := 'TestMethod';
Writeln(FData.Strings[0]);
end;
procedure TTestObj.AnotherMethod;
begin
FData.Text := 'AnotherMethod'; …Run Code Online (Sandbox Code Playgroud) Delphi Tokyo 64-bit将使用单精度计算一些数学函数,如果使用整数常量调用,例如
{$apptype console}
uses
system.math;
var
d: double;
begin
d := 10;
writeln(log2(10):20:16, log2(10.0):20:16,log2(d):20:16);
end.
Run Code Online (Sandbox Code Playgroud)
将打印3.3219280242919923 3.3219280948873626 3.3219280948873626.
我被告知在Delphi东京64位刷新非正常数字为零?,我应该使用类型转换double(10)来解决此功能.问题是,从我可用的Delphi版本开始,只有东京允许这种类型转换(IMO,即使文档似乎禁止它,说只允许变体被转换为真实类型).
我知道,XE4(VER250)给出了错误Error: E2089 Invalid typecast的double(10),但我不知道VER260 .. VER310信息.
那么第一个允许类型转换的Delphi版本
double(10)呢?
delphi ×8
casting ×2
delphi-7 ×2
delphi-xe8 ×1
dll ×1
exception ×1
freepascal ×1
integer ×1
java ×1
javascript ×1
macros ×1
math ×1
pascal ×1
pointers ×1
powershell ×1
preprocessor ×1