我正在尝试使用Inno Setup的Pascal脚本从Windows注册表(在本例中为Google Sketchup)获取应用程序的安装目录,以便我可以在那里安装插件.
注册表项没有名称,它在Regedit中只有"(默认)".
我试过这个:
RegQueryStringValue( HKLM, 'SOFTWARE\Google\Google Sketchup 6', '(Default)', pluginLoc );
Run Code Online (Sandbox Code Playgroud)
但它没有返回值.有什么建议?
这是分析扑克几率的程序的一部分,特别是德州扑克.我有一个我很满意的程序,但它需要一些小的优化才能完美.
我使用这种类型(当然还有其他类型):
type
T7Cards = array[0..6] of integer;
Run Code Online (Sandbox Code Playgroud)
在决定如何对其进行排序时,此数组有两件事可能很重要:
有了这些信息,对这个数组进行排序的绝对最快的方法是什么?我使用Delphi,所以pascal代码将是最好的,但我可以读取C和伪,虽然有点慢:-)
目前我使用quicksort,但有趣的是,这几乎不比bubblesort快!可能因为项目数量很少.排序几乎占该方法总运行时间的50%.
编辑:
Mason Wheeler问为什么有必要进行优化.一个原因是该方法将被称为2118760次.
基本的扑克信息:所有玩家都获得两张牌(口袋),然后五张牌被发给牌桌(第一张牌被称为翻牌圈,第三张被称为翻牌圈,第二张牌是转牌圈,最后一张牌是河牌圈.每位玩家选择五张牌卡来弥补他们的手)
如果口袋里有两张牌,P1和P2,我将使用以下循环来生成所有可能的组合:
for C1 := 0 to 51-4 do
if (C1<>P1) and (C1<>P2) then
for C2 := C1+1 to 51-3 do
if (C2<>P1) and (C2<>P2) then
for C3 := C2+1 to 51-2 do
if (C3<>P1) and (C3<>P2) then
for C4 := C3+1 to 51-1 do
if (C4<>P1) and (C4<>P2) then
for C5 := C4+1 to 51 do
if (C5<>P1) and (C5<>P2) then …Run Code Online (Sandbox Code Playgroud) 使用System.Move()从字符串数组中插入/删除项目并不像从其他简单数据类型中插入/删除它那么容易.问题是...字符串是在Delphi中计算的引用.在引用计数数据类型上使用Move()需要更深入的内部编译器行为知识.
有人可以在这里解释为实现这一目标所需的步骤,或者更好地使用一些代码片段,或者指导我在互联网上提供一个很好的参考?
哦,请不要告诉我使用"懒惰但缓慢的方式",也就是说,对于循环,我知道.
我想在Delphi 5.0中做一个ArrayList.所以我找到了这个代码的解决方案:
var arr: array of String;
Run Code Online (Sandbox Code Playgroud)
好的,但每次我添加的东西我都这样做:
var
Form1: TForm1;
var arr : array of String;
procedure TForm1.Button1Click(Sender: TObject);
var aux :string;
var len:integer;
begin
len := Length(arr) + 1;
SetLength(arr, len);
arr[len-1] := 'abc' + IntToStr(len);
Button1.Caption := arr[len-1]; // just to writeout something
end;
Run Code Online (Sandbox Code Playgroud)
我是一名C++程序员,我对Pascal一无所知.我总是听说Pascal索引从1开始,而不是0.在上面的过程中我做arr [len-1]因为0索引开始.
有没有比Pascal数组更好的方法?和C++一样std::vector吗?
我下载了Lazarus,但也使用过Embarcadero Delphi IDE.我有一个关于构建跨平台Delphi应用程序的问题.
如何在win32环境下构建它们?我从Lazarus网站上阅读了wiki,它解释了如何做,但我仍然不明白.是否可以在win32环境下为Linux和MacOS构建和编译应用程序?如果有可能,有人可以逐步解释如何准确地做到这一点.
编辑: 现在是时候讨论新的XE2版本的Delphi IDE我认为:)
谢谢
我有一个Windows .exe文件,但它的源代码丢失了.开发人员没有责任离开我们公司.我认为这是一个delphi/pascal程序.开发人员使用了很多库,但我不确定哪些库.有没有一个工具可以告诉我哪些库用于制作这个exe?
背景1
var text:String;
text:='hello';
myFunc(text);
Run Code Online (Sandbox Code Playgroud)
上下文2
function myFunc(mytext:String);
var textcopy:String;
begin
textcopy:=mytext;
end;
Run Code Online (Sandbox Code Playgroud)
myFunc从Context1调用Context2,局部变量mytext指向Context2之外的内存?或者在mytext范围内有自己的内存空间,并用相同的内容填充/复制text?我可能遗漏了一些非常基本的东西,因为我收到了一个access violation错误.
有没有办法明确指定一个函数是应该通过引用还是通过值接收参数,然后像C一样复制?我不确定我是怎么做的.
我有一个庞大的文件,我必须逐行解析.速度至关重要.
一行示例:
Run Code Online (Sandbox Code Playgroud)Token-1 Here-is-the-Next-Token Last-Token-on-Line ^ ^ Current Position Position after GetToken
调用GetToken,返回"Here-is-the-Next-Token"并将CurrentPosition设置为令牌最后一个字符的位置,以便为下次调用GetToken做好准备.令牌由一个或多个空格分隔.
假设文件已经在内存中的StringList中.它很容易适合内存,比如200 MB.
我只担心解析的执行时间.什么代码将在Delphi(Pascal)中产生绝对最快的执行?
对于类的每个setter,我必须实现一些事件逻辑(OnChanging,OnChanged):
procedure TBlock.SetWeightIn(const Value: Double);
var OldValue: Double;
begin
OldValue := FWeightIn;
DoOnChanging(OldValue, Value);
FWeightIn := Value;
DoOnChanged(OldValue, Value);
end;
procedure TBlock.SetWeightOut(const Value: Double);
var OldValue: Double;
begin
OldValue := FWeightOut;
DoOnChanging(OldValue, Value);
FWeightOut := Value;
DoOnChanged(OldValue, Value);
end;
Run Code Online (Sandbox Code Playgroud)
你能否建议一种方法来实现这一点,而不必为每个setter重复所有这些行?
我试图在所有Internets中找出在Pascal中打印简单选项卡的特殊字符.我必须在CLI程序中格式化一个表,这将非常方便.