我们正在编写从Pascal到JVM Bytecode的某种编译器.我们已经实现了表达式树生成,因此下一步应该是创建文件.您能否建议至少从某些静态数据生成任何文件的指南/教程?因为我已经用Google搜索了2个小时并阅读了JVM规范,但我真的需要一些最简单的例子来开始开发整个东西..class.class
我正在为游戏0x10c 实现16位DCPU的一个assemblinker.
有人向我建议的一种技术是使用"叠加,就像在当天回来的Turbo Pascal",以便在运行时交换代码.
我得到了基本的想法(链接覆盖符号到同一个内存,在ref之前交换),但是它们的实现是什么?
这是编译器在引用之前插入的函数吗?这是陷阱吗?叠加层的数据是存储在叠加层的位置,还是存放在某个大表中?它运作良好,还是经常破裂?是否有用于组装的接口与覆盖的Pascal链接(反之亦然),还是不兼容?
谷歌基本上没有给我任何信息(除了它是现代Pascal编译器的禁止).而且,我只是,就像,五年太年轻,以至于他们当前都不需要它们.
我想知道是否有办法在pascal中创建一组记录.我正在寻找互联网,并认为这是不可能的.
type
TRecord = record
StrField: string;
IntField: Integer;
end;
TSetOfRecord = set of TRecord;
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的程序上创建一个日志系统,它将记录文本文件上的调试消息,我想保存调用日志消息的代码中的确切位置,但我不想使用Assert函数,因为它创建例外,这个系统不仅仅用于记录异常,我还要编写一些调试信息.
使用断言的示例:
procedure AnyProcedure();
begin
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Start');//Log occurred is "c:\progr~..jkdj.pas" at line [29]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Step1 done');//Log occurred is "c:\progr~..jkdj.pas" at line [37]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do
Log.AddLine('Log occurred is '+E.Message+' : Step2 done');//Log occurred is "c:\progr~..jkdj.pas" at line [45]
end;
//....some code
try
Assert(1=0);
except
on E: Exception do …Run Code Online (Sandbox Code Playgroud) 我一直在搜索Lazarus IDE文档,但到目前为止只发现了与交叉编译相关的信息,所以我希望有人能给我一个直接的答案.我目前正在开发一个需要编译32位Windows和64位Windows的项目.另外,我已经设置了Free Pascal编译器的两个版本.Lazarus是否具有用于在两个编译器中进行配置的任何内置功能,然后使用适当的编译器基于构建目标?理想情况下,这将在全局级别完成,以便配置在项目中保持不变,但如果只能在项目级别完成,我不介意这样做.
我现在正在学习Pascal一个月了,我遇到了一个似乎无法解决的问题.基本上我有2号,Ñ和中号,其中Ñ小于10 100 000和中号小于10 8两者都是大于0我需要计算Ñ模中号.
我无法弄清楚如何做到这一点,甚至没有QWord.我尝试过,string但我不知道一个好方法.它总是对我来说太复杂了,因为我使用了一个for函数,我从字符串N和字符串M中得到最后一个数字然后我用两个if函数减去它们(其中N的最后一个数字高于或等于M的最后一个数字,如果它更低).基本上,我觉得这个简单的问题太复杂了.
所以我有一个更新一些XML的函数,我希望将脚本部分中{AppVersion}设置的[Setup]函数作为常量传递给此函数
我试过了
MyFunction(ExpandConstants({AppVersion})
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误?如何正确地将此常量传递给我的函数
我的守则
[Files]
Source: ".\Source\myfile.txt"; DestDir: "{app}\System"; AfterInstall: MyFunction('{#SetupSetting("AppVersion")}')
[Setup]
AppId=MyApp
AppName=My Application
AppVersion=011
DefaultDirName=C:\MyApp
[Code]
procedure MyFunction(Text: String);
begin
MsgBox(Text, mbInformation, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud) 这是一个例子(不起作用):
type
menu = class
private
menu_element = RECORD
id: PtrUInt;
desc: string;
end;
public
procedure foo();
end;
Run Code Online (Sandbox Code Playgroud) 问题:我最近收购了1989年的IBM PS2,我正在尝试通过软盘将大型文件从我新的基于UNIX的机器移到这个IBM.我有一个bash脚本将我的文件分成~2MB块,现在我正在尝试编写一个pascal程序,以便在它们被传输后重建这些文件.
我无法在此计算机上找到正确的读/写文件方法.我已经尝试了各种pascal教程站点,但它们都适用于较新版本(我在Pascal文件处理中遵循的站点).我能够创建一个空文件(如下所述),但我无法写入它.有谁知道这种类型的计算机正确的pascal读写方法?
我知道这是一个晦涩难懂的问题,所以,如果您有任何帮助,请提前感谢您!
细节:
正确创建文件的当前测试代码如下:
program testingFiles;
uses Crt, Win;
const FILE_NAME = 'testFile.txt';
var outFile : File;
begin
writeln('creating file ...');
Assign(outFile, FILE_NAME);
rewrite(outFile);
end.
Run Code Online (Sandbox Code Playgroud)
这是一些测试代码不工作,方法的append()和close()无法找到:
program testingFiles;
uses Crt, Win;
const FILE_NAME = 'testFile.txt';
var outFile : File;
begin
writeln('creating file ...');
Assign(outFile, FILE_NAME);
append(outFile);
writeln('this should be in the file');
close(outFile);
end.
Run Code Online (Sandbox Code Playgroud)
这是另一种也不起作用的writeln()方法,该方法只能打印到终端.但否则这会编译.
program testingFiles;
uses Crt, Win;
const FILE_NAME = 'testFile.txt';
var outFile : File; …Run Code Online (Sandbox Code Playgroud) Delphi函数BoolToStr将布尔值转换为字符串.
结果为true或false,或分别为"numeric"," - 1"和"0".为什么-1而不是1?