我想知道如何仅使用安装了Lazarus的FPC(Pascal)而不使用Delphi语言(Object Pascsl)来开发GUI应用程序(32位)。谢谢。
经过大量的实验,我找到了一种方法,用FreePascal编译的DLL与Delphi编译的EXE交换PChar.我负责DLL和EXE源代码,但一个必须在FreePascal中,另一个在Delphi中.我的解决方案涉及DLL中的以下方法:
function GetAString(): PChar;
var aString: string;
begin
aString := 'My String';
result := StrAlloc(length(aString) + 1);
StrPCopy(result, aString);
end;
procedure FreeString(aString: PChar);
begin
StrDispose(aString);
end;
Run Code Online (Sandbox Code Playgroud)
从Delphi EXE中,要调用GetAString方法,我需要调用GetAString方法,将PChar保存到实际的Delphi String并调用FreeString方法.
这是从FreePascal DLL与Delphi EXE交换字符串的最佳方法吗?我可以避免从Delphi调用FreeString吗?
最后,如果这是正确的解决方案,默认情况下它将如何使用Delphi 2010和WideString:我是否还需要在FreePascal中强制使用WidePChar?
任何人都可以帮助我保护选择组或组件。
举些例子
If ('Readme.txt').selected or ('compact').selected = True then
begin "Password wizard page";
else
result := true;
end;
Run Code Online (Sandbox Code Playgroud)
这个工作脚本与此类似:P
function CheckPassword(Password: String): Boolean;
begin
result := false;
if (Password='component') or (Password='type') then
result := true;
end;
Run Code Online (Sandbox Code Playgroud) 用户输入一个整数,该整数对应于定义的枚举类型的值。我需要将该值分配给变量t。这就是我的想法:
type test = (red,green,blue,fish);
var t:test;
n,i:integer;
begin
readln(n);
t:=red;
for i:=1 to n do
t:=succ(t);
end.
Run Code Online (Sandbox Code Playgroud)
我是否让任务过于复杂化了?是否可以写一个更简单的算法?
是否有编译器定义,告诉源代码是否使用delphi编译,在等同于Free Pascal中的FPC定义的意义上?
我正在开发一个应该兼容三个Pascal编译器的单元(Lazarus/Free Pascal,Delphi和winsoft PocketStudio).编译器之间存在一些差异,因此我想在编译器特定版本中提供代码的一些关键部分.
对于免费Pascal,我可以写
{$IFDEF FPC}
DoSomething;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
但是Delphi的等价物是什么?
使编译器生成尾递归代码似乎是一个简单的想法.但是大多数常用语言编译器(包括C和Pascal)都没有这样做,因此这些语言不能仅仅根据过程调用来表示迭代过程.这些语言中尾递归的难点在于它们的实现使用堆栈来存储过程参数和局部变量以及返回地址.
我无法理解为什么如果将堆栈用于过程参数,局部变量和返回地址,则无法实现尾递归.
我是计算机科学专业的学生,正在学习 Prolog 逻辑编程。
\n\n我发现了一个有趣的 Prolog 解释器picoProlog ( http://spivey.oriel.ox.ac.uk/corner/Logic_Programming )。
\n\n为了更多地了解Prolog,我尝试编译他们的源代码,但失败了。
\n\n在这个网页中,他们说:
\n\n\n\n\n解释器源代码是用 Pascal 的最小方言编写的,避免了包括指针在内的许多功能,但使用宏来克服 Pascal 的一些限制,其风格受到 Kernighan 和 Plauger 的《Pascal 中的软件工具》一书的启发。它附带了一个从 Pascal 方言到 C 的翻译器,可用于构建解释器以及所需的宏处理器的源代码。
\n\n要在 Linux 机器上构建解释器,只需提取 tar 文件并输入 make。该建筑分几个阶段进行:
\n\n\n
\n\n- 首先,Pascal-to-C 转换器 ptc 是从 C 源代码构建的,包括用 lex 和 yacc 编写的词法分析器和解析器。文件 README 提供了该转换器接受的非常有限的 Pascal 子集的一些详细信息。
\n- 接下来,使用ptc来构建宏处理器ppp。
\n- 最后,从文件 pprolog.x 中的源代码构建 picoProlog 解释器,首先使用 ppp 扩展宏以获得文件 pprolog.p,然后使用 ptc 翻译为 C,最后编译 C 代码。
\n文本和软件版权 \xc2\xa9 JM Spivey,1996、2002、2010。
\n
他们说 …
我正在尝试将Pascal类型转换为C#.我在谷歌上看了一下,但我没有设法找到答案,可能是因为我没有正确搜索,所以很抱歉,如果这是重复的话.
我有这两种Pascal类型:
type
TVector3i = array [0..2] of longint;
Tcolface = packed record
A, B, C: word;
SurfaceA, SurfaceB: word;
end;
Run Code Online (Sandbox Code Playgroud)
我知道
Tcolface = packed record
A, B, C: word;
SurfaceA, SurfaceB: word;
end;
Run Code Online (Sandbox Code Playgroud)
转换为:
struct Tcolface {
ushort A, B, C;
ushort SurfaceA, SurfaceB;
}
Run Code Online (Sandbox Code Playgroud)
但如何TVector3i = array [0..2] of longint;转换?
我试图避免使用/编写一个类,因为当我转换其余的Pascal代码时,它将期望该类型作为数组,并且我试图避免将其转换为.x .y和.z.
我确实考虑过这样做float[] variablename = new float[3];,但是一旦得到List<float[]> variblename它就会变得更加复杂.
完整的代码是:
TVector3i = array [0..2] of Longint;
TVector3f = array [0..2] of Single;
TVector3d …Run Code Online (Sandbox Code Playgroud) 我想要一个编程代码来打印范围之间的奇数来教学生。这里我取范围为1到10。所以我想打印1到10之间的奇数。
我编写此代码是为了打印 1 到 10 之间的奇数
program printOdd1to10; {Prints odd numbers 1 - 10}
var counter : integer;
begin
for counter := 1 to 10 do
begin
Writeln(counter); {prints new line}
counter := counter + 2 {increment by value 2, like step 2}
end;
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
但是当我运行时,它会打印出一长串错误答案。那么,如何在 Pascal 编程中打印这样的模式:奇数、偶数、3(3,6,9...) 次数字。