我怎样才能shellexecute()在Lazarus中为Mac 执行相同的操作?
我一直在锐化编码刀并重新回到开发阶段.几年前,许多人提到在(经典)Mac上出现的赛门铁克Think Pascal调试器是绝对的傻瓜,没有其他任何东西像它在任何地方.我发现这个说法很奇怪,考虑到没有人试图克隆所说的调试器......这究竟是什么让这个特殊的调试器如此特别?
Q1:这是什么意思:WriteLn (#$0b)?
$0b应该是十六进制的0x0b,但#标志呢?
Q2:
x:=readkey;
if ( x = #5) do...
Run Code Online (Sandbox Code Playgroud)
是否#5意味着5?那么#标志是什么?
非常感谢.
为什么将Application.MainFormOnTaskbar设置为False并不会阻止应用程序显示在任务栏上?
请帮忙.谢谢.
大多数Pascal控件结构对我有意义,例如:
for ... do {statement};
if (condition) then {statement};
while (condition) do {statement};
Run Code Online (Sandbox Code Playgroud)
其中{statement}是单个语句或begin ... end块.我有一个问题:
repeat {statement-list} until (expression);
try {statement-list} except {statement-list} end;
Run Code Online (Sandbox Code Playgroud)
重复并尝试具有相同的通用结构,只接受单个语句或开始 ... 结束块,而不是具有未正式阻止开头和结尾的语句列表,这不是更好吗?
好的,所以我试图在Direct X游戏上为一些额外的按钮做一些叠加.
我在这里找到了一个很好的覆盖的c ++示例:http://www.gamedev.net/topic/359794-c-direct3d-hooking-sample/
所以我开始将它转换为Delphi.通过一些日志记录,我可以看到它在正确的进程上启动钩子并正确挂钩Direct3DCreate9().
下一步成功创建TMyDirect3D9.但是这个过程从这里崩溃了.
我的有根据的猜测(基于Ollydbg中的一些调试)当我通过挂钩的Direct3DCreate9()将MyDirect3D9返回到原始进程并且它尝试调用其中一个类(接口)函数时,它失败了.
代码如下.如果我能提供任何其他信息以帮助告诉我.
主DLL:
library LeagueUtilityBox;
{$R *.res}
{$DEFINE DEBUG}
uses
Windows,
APIHijack in 'APIHijack.pas',
Direct3D9 in '..\DirectX 9.0\Direct3D9.pas',
uSharedMem in '..\Misc\uSharedMem.pas',
MyDirect3D9 in 'MyDirect3D9.pas',
MyDirect3DDevice9 in 'MyDirect3DDevice9.pas',
{$IFDEF DEBUG}
SysUtils,
uLog in '..\Misc\uLog.pas',
{$ENDIF}
uMisc in 'uMisc.pas';
var
SharedMem : TSharedMem;
D3DHook: SDLLHook;
hHook : DWORD;
MyDirect3D9 : TMyDirect3D9;
function GetTargetProcess: String;
const
KeyBase : DWORD = HKEY_CURRENT_USER;
KeyLocation : String = 'Software\LeagueUtilityBox';
var
RegKey : HKEY;
TargetProcess : Array[0..511] Of …Run Code Online (Sandbox Code Playgroud) 我想学习在Lazarus中开发应用程序,但我需要Lazarus的资源,最好是书籍.
请记住,我知道Pascal的0.谢谢.
经过很长一段时间的C工作后,我回到Delphi,发现Delphi中有一些新东西.一个是NativeInt.
令我惊讶的是,我发现Delphi和C处理x86-64不同的"原生整数" 1种类型.Delphi NativeInt似乎表现得像C void*和Delphi Pointer,这与我对名称的期望相反.
在Delphi中,NativeInt的大小为64位.代码中表示:
SizeOf(NativeInt) = SizeOf(Pointer) = SizeOf(Int64) = 8
Run Code Online (Sandbox Code Playgroud)
C只有64位指针.int仍然是32位.代码2中表示:
sizeof(int) == 4 != sizeof(void *) == 8
Run Code Online (Sandbox Code Playgroud)
甚至Free Pascal编译器3也同意NativeInt的大小.
为什么Delphi NativeInt选择64位,C int选择32位?
当然,根据语言文档/规范,两者都是有效的.但是,"语言允许它"并不是一个真正有用的答案.
我想这与执行速度有关,因为这是今天C的主要卖点.维基百科和其他消息来源都说x86-64确实有64位操作数寄存器.但是,它们还声明默认操作数大小为32位.因此,与32位操作数相比,64位操作数的操作可能更慢?或者64位寄存器可以同时执行2个32位操作?这是一个原因吗?
编译器的创建者是否确实选择了这些尺寸?
这是我的问题:我想创建一个记录类型,其中在变体记录的情况下,一些(但不是全部)将具有某个字段.根据维基,这是完全合法的.然而,当我尝试编译以下代码时:
program example;
{$mode objfpc}{$H+}
uses sysutils;
type
maritalStates = (single, married, widowed, divorced);
TPerson = record
name: record
first, middle, last: string;
end;
sex: (male, female);
dob: TDateTime;
case maritalStatus: maritalStates of
single: ( );
married, widowed: (marriageDate: TDateTime);
divorced: (marriageDate, divorceDate: TDateTime;
isFirstDivorce: boolean)
end;
var
ExPerson: TPerson;
begin
ExPerson.name.first := 'John';
ExPerson.name.middle := 'Bob';
ExPerson.name.last := 'Smith';
ExPerson.sex := male;
ExPerson.dob := StrToDate('05/05/1990');
ExPerson.maritalStatus := married;
ExPerson.marriageDate := StrToDate('04/01/2015');
end.
Run Code Online (Sandbox Code Playgroud)
编译失败,出现以下错误:
$ fpc ex.pas
Free …Run Code Online (Sandbox Code Playgroud)