我需要在按钮单击上运行cmd作为管理员.有用.但我需要以管理员身份运行它.这是怎么做到的?
ShellExecute(Handle, 'open', 'c:\Windows\system32\cmd.exe', nil, nil, SW_SHOWNORMAL)
Run Code Online (Sandbox Code Playgroud) 我已经定义了一个记录,其中包含许多不同类型的字段(整数,实数,字符串,...以及"数组..."的动态数组).我想将它作为一个整体保存到文件中,然后能够将其加载回我的程序.我不想单独保存每个字段的值.文件类型(二进制或ascii或...)并不重要,因为Delphi可以将其读回记录.
你有什么建议吗?
如何获取exe文件的内容并将其转换为Base64编码?
编辑
我用D2010,我想知道它究竟是怎么可能的?
open an exe fileconvert its content into base64在Delphi 2010中,如果我想这样做:
{$IFDEF VER999}
//some delphi 2010-specific code here
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
我需要使用什么版本代替"999"?
我需要三个快速大字符串函数:快速搜索,快速搜索和替换,以及字符串中子字符串的快速计数.
我在C++和Python中遇到过Boyer-Moore字符串搜索,但是用于实现快速搜索和替换的唯一Delphi Boyer-Moore算法是由Peter Morris(前身为DroopyEyes软件)及其网站的FastStrings的一部分.和电子邮件不再有效.
我已经将FastStrings移植到Delphi 2009/2010的AnsiStrings中,其中一个字节等于一个AnsiChar,但是使它们也可以在Delphi 2010中使用String(UnicodeString)显得非常重要.
使用这个Boyer-Moore算法,应该可以轻松地进行不区分大小写的搜索,以及不区分大小写的搜索和替换,没有任何临时字符串(使用StrUpper等),并且不调用比Boyer更慢的Pos()需要在重复搜索同一文本时进行摩尔搜索.
(编辑:我有一个部分解决方案,写作这个问题的答案,几乎100%完成,它甚至有一个快速的字符串替换功能.我相信它必须有bug,特别是认为,因为它假装是Unicode由于未实现的Unicode承诺,它必须存在故障.)
(编辑2:有趣和意外的结果;堆栈上的unicode代码点表的大堆栈大小 - 下面的代码中的SkipTable严重阻碍了你可以在unicode字符串boyer中完成的双赢优化量 - 摩尔字符串搜索.感谢Florent Ouchet指出我应该立即注意到的内容.)
当任何TGraphic后代使用类过程TPicture.RegisterFileFormat()注册其自己的图形文件格式时,它们都存储在Graphics.FileFormats全局变量中.
太糟糕了,FileFormats变量不在"Graphics.pas"的"interface"部分,所以我无法访问它.我需要读取此变量来为我的文件列表控件实现一个特殊的过滤器.
如果不手动修复Graphics.pas的源代码,我可以获得该列表吗?
这不会编译的原因是什么?
type
IInterfaceA = interface ['{44F93616-0161-4912-9D63-3E8AA140CA0D}']
procedure DoA;
end;
IInterfaceB = interface(IInterfaceA) ['{80CB6D35-E12F-462A-AAA9-E7C0F6FE0982}']
procedure DoB;
end;
TImplementsAB = class(TSingletonImplementation, IInterfaceB)
procedure DoA;
procedure DoB;
end;
var
ImplementsAB: TImplementsAB;
InterfaceA: IInterfaceA;
InterfaceB: IInterfaceB;
begin
ImplementsAB := TImplementsAB.Create;
InterfaceA := ImplementsAB; >> incompatible types
...
end
Run Code Online (Sandbox Code Playgroud)
相比之下,这就是我的工作方式:
InterfaceA := ImplementsAB as InterfaceB;
Run Code Online (Sandbox Code Playgroud)
要么
InterfaceA := InterfaceB;
Run Code Online (Sandbox Code Playgroud)
我的意思是,如果IInterfaceB继承自IInterfaceA且TImplementsAB实现了IInterfaceB,那么实现IInterfaceA并且类型兼容也是不合逻辑的?
这是一个构造的例子.我不想在这里发布原始代码.我尝试提取相关部分.
我有一个管理监听器列表的界面.
TListenerProc = reference to procedure (SomeInt : ISomeInterface);
ISomeInterface = interface
procedure AddListener (Proc : TListenerProc);
end;
Run Code Online (Sandbox Code Playgroud)
现在我注册一个监听器:
SomeObj.AddListener (MyListener);
procedure MyListener (SomeInt : ISomeInterface);
begin
ExecuteSynchronized (procedure
begin
DoSomething (SomeInt);
end);
end;
Run Code Online (Sandbox Code Playgroud)
我确实得到了内存泄漏.永远不会释放匿名方法和接口.我怀疑这是由于某种循环引用.匿名方法保持界面生效,界面保持匿名方法生效.
两个问题:
提前致谢!
编辑:在一个小到足以在此发布的应用程序中重现这一点并不容易.我现在能做的最好的事情如下.匿名方法不会在这里发布:
program TestMemLeak;
{$APPTYPE CONSOLE}
uses
Generics.Collections, SysUtils;
type
ISomeInterface = interface;
TListenerProc = reference to procedure (SomeInt : ISomeInterface);
ISomeInterface = interface
['{DB5A336B-3F79-4059-8933-27699203D1B6}']
procedure AddListener (Proc : TListenerProc);
procedure NotifyListeners;
procedure Test;
end;
TSomeInterface = class (TInterfacedObject, ISomeInterface) …Run Code Online (Sandbox Code Playgroud) delphi memory-management interface anonymous-methods delphi-2010
我刚刚开始使用Delphi 2010中的新单元IOUtils.pas,我发现它们将所有方法都放在Records(TFile, TPath, TDirectory)类函数和过程中.
在记录而不是类中执行此操作有什么好处吗?在这两种情况下都不需要任何变量或实例,但我不确定在内存消耗或性能改进方面是否有任何实际好处.
delphi ×10
delphi-2010 ×10
interface ×2
algorithm ×1
attributes ×1
base64 ×1
boyer-moore ×1
encoding ×1
file ×1
file-io ×1
formats ×1
graphics ×1
replace ×1
rtti ×1