我希望快一点 - 我即将钻研Delphi 5遗留应用程序,该应用程序调用DLL(也用D5编写),传递DLL可以根据需要修改的字符串.
我有DLL和应用程序的代码.粘贴在DLL源代码顶部的是关于使用ShareMem的注释,它需要是项目的uses子句中的第一行等.
如果我将这一切移植到D2007,是否有更好的(或更现代的)方法来获得Delphi应用程序与Delphi DLL共享字符串数据?D5 ShareMem的东西是否仍适用于Delphi 2007应用程序(使用FastMM等)?我还没有重新编译整个事情的bash - 只是想知道这一点是否会成为一个问题,是否有替代/推荐的方法这样做?
FWIW,DLL完全是第一方(它只被这个特定的应用程序使用 - 所以在D2007下重新编译它也不会有问题).
我有一个显示谷歌地图页面的TWebBrowser组件.问题是,当用户按F5页面刷新和页面重新加载.这会导致javascript变量重新初始化并与Delphi不同步,并出现脚本错误对话框, 'undefined'为null或不是对象.
我想停止用户刷新.
我为OnBeforeNavigate2尝试了这个事件:
procedure TNewOrganizationForm.mapAddressBeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
inherited;
Cancel := Assigned(fMapEngine) and not fMapEngine.Loading;
end;
Run Code Online (Sandbox Code Playgroud)
但是当我设置一个断点时,它甚至都没有被调用.还有另外一种方法吗?
这是一个简单的测试,演示了我在项目中遇到的问题,使用Delphi 2007.我使用TComponent类来存储组件的各种状态.但永远不会调用Int64属性writer方法(仅设置目标字段).因此,不可能依靠编写器来更新GUI TList或类似的东西......
例如:
TTestClass = Class(TComponent)
Private
Fb: Int64;
Fa: Integer;
Procedure SetFa(Const Value: Integer);
Procedure SetFb(Const Value: Int64);
Published
Property a: Integer Read Fa Write SetFa;
Property b: Int64 Read Fb Write SetFb;
Public
Procedure SaveInstance(Var Str: TStream);
Procedure LoadInstance(Var Str: TStream);
Procedure ReallyLoadInstance(Var Str: TStream);
Procedure Assign(Source: TPersistent); Override;
End;
TForm1 = Class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Procedure Button1Click(Sender: TObject); // test: 1st step, save the class
Procedure Button2Click(Sender: TObject); // test: 2nd step, try …Run Code Online (Sandbox Code Playgroud) 我正在使用QWINSTA.EXE从我们网络上的终端服务器获取会话/用户列表(我的计算机是Windows 7 Pro,TS是Windows Server 2003).我将此函数的输出传递给文本文件,然后处理文本文件以获取我需要的信息.如果有更好的方法,请原谅并跳过我冗长的帖子并指出我正确的方向.
我的问题是,无论是ShellExecute()也不ShellExecuteEx()让我即使执行程序,而不必首先提升权限.如果您转到未提升的命令提示符,您甚至不会在目录列表中看到EXE(也没有隐藏属性).使用"以管理员身份运行"命令提示符,您可以正常查看/使用它.无论如何,您都可以从Windows资源管理器中看到它.
我戳了一下,发现了这个gem:RunFileAsAdminWait()如果我尝试直接调用QWINSTA.EXE(它失败并显示错误消息:),则无效System Error. Code: 2. The system cannot find the file specified..如果我将所有内容都包装到批处理文件中并RunFileAsAdminWait()在批处理文件上使用,那么它似乎工作正常.
我知道,但没有用过,WTSEnumerateSessions().除了刚刚链接到的MSDN链接之外,我还没有找到关于它的更多信息.有人知道从Delphi使用该API的大量参考代码吗?它在Delphi 2007的Windows单元中不可用.
问题:
是否有另一种/更好的方法来执行需要管理员权限甚至访问的EXE?或者甚至是这里发生了什么?
有没有更好的方法来获取终端服务器上的活动会话列表,尤其是不需要提升权限的会话列表?
如果我坚持使用这种方法,我是以"正确的方式"做到的吗?
感谢您提供的任何帮助!
为什么=运算符True在将varEmpty Variant变量与零评估varInteger Variant变量进行比较时会产生结果?
var
V1 : Variant;
V2 : Variant;
begin
V2 := 0;
if(V1 = V2)
then ShowMessage('V1 = V2')
else ShowMessage('V1 <> V2');
end;
Run Code Online (Sandbox Code Playgroud)
此代码生成以下输出:
V1 = V2
相等运算符是否=仅检查Variant变量的值部分?
我需要提取用户的 Windows 语言,我正在使用下面的函数。但是我在我当前的机器上进行了测试(它是开放式英语),但函数返回是“葡萄牙语(巴西)”。
其实我的机器本来是用这种语言的,但是在我安装了一个新的语言包之后,它现在是英语,而不是葡萄牙语;所以我认为下面的功能不能正常工作。还有另一种选择吗?
谢谢
function GetWindowsLanguage: string;
var
WinLanguage: array [0..50] of char;
begin
VerLanguageName(GetSystemDefaultLangID, WinLanguage, 50);
Result := StrPas(WinLanguage);
end;
Run Code Online (Sandbox Code Playgroud) 我正在为我的DevExpress TdxMemDataset添加一些索引以提高性能.该TdxMemIndex具有SortOptions,其中包括该选项soCaseInsensitive.我的数据通常是GUID字符串,因此它不区分大小写.我想知道我是否更好的只是强制所有数据到相同的情况或如果soCaseInsensitive标志和使用loCaseInsensitive标志调用Locate只有一个较小的性能损失(大致相当于每次转换我的字符串的情况我需要使用索引).
此时我将关闭CaseInsentive并转换案例.
我尝试将一些代码从D2007移植到DXE2.这个简化的代码在D2007中编译得很好.在DXE2中显示此错误:
[DCC Warning] Unit1.pas(10): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
[DCC Error] Unit1.pas(37): E2010 Incompatible types: 'AnsiChar' and 'Char'
Run Code Online (Sandbox Code Playgroud)
可能是一个unicode问题.有人能告诉我为什么会发生这种情况以及我该如何纠正它?
问候
代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TSetOfChar = Set of Char; // Line 10
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FCharacterSet: TSetOfChar;
public
property CharacterSet: TSetOfChar read FCharacterSet write FCharacterSet;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: …Run Code Online (Sandbox Code Playgroud) 我已经为Delphi 2007应用程序创建了一个资源文件.资源文件包含10个Bitmap条目.我想知道是否有办法通过递归浏览资源文件将所有位图加载到Imagelist中,或者我是否必须一次将它们拉出一个.
提前致谢.
我正在尝试使用Delphi 2007使用JEDI JCL压缩一些文件.问题是我无法弄清楚为什么我一直得到这个错误" Sevenzip: Failed to load 7z.dll"
我的代码是:
var
archiveclass: TJclDecompressArchiveClass;
archive: TJclDecompressArchive;
item: TJclCompressionItem;
s: String;
i: Integer;
begin
archiveclass := GetArchiveFormats.FindDecompressFormat(dir);
if not Assigned(archiveclass) then
raise Exception.Create('Could not determine the Format of ' + dir);
archive := archiveclass.Create(dir);
try
if not (archive is TJclSevenZipDecompressArchive) then
raise Exception.Create('This format is not handled by 7z.dll');
archive.ListFiles;
s := Format('test.zip Item Count: %d'#13#10#13#10, [archive.ItemCount]);
for i := 0 to archive.ItemCount - 1 do
begin
item := archive.Items[i];
case item.Kind …Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-2007 ×10
7zip ×1
components ×1
delphi-xe2 ×1
devexpress ×1
dll ×1
jedi ×1
operators ×1
performance ×1
refresh ×1
streaming ×1
twebbrowser ×1
variant ×1
windows-7 ×1