从优秀的Detour库中查看此演示源:
implementation
{$R *.dfm}
var
TrampolineGetMemory: function(Size: NativeInt): Pointer;
cdecl = nil;
Run Code Online (Sandbox Code Playgroud)
请看一下cdecl = nil;声明.在这种情况下它意味着什么?
注意 - 我已经知道它cdecl代表一个调用约定.
我想将本身就是XML字符串的字符串存储为JSON对象的属性,将其转换为可靠和正确的方法是什么?由于JSON不支持二进制数据,我是否应该先将XML数据编码为BASE64,然后再保存为JSON对象?
我要存储的数据示例:
{
"string1" : "<xml>...moderately complex XML...</xml>"
}
Run Code Online (Sandbox Code Playgroud) 编辑1:实际上,我只是想避免因关闭Word文档并打开另一个文档而导致的闪烁.但现在看来这种方法并不可行.
问候,是否可以防止整个屏幕(不仅是桌面)更新?问题来自这一个问题.我想要做的是,在我的Word加载项中,当我关闭Word文档并打开另一个文档时,锁定整个屏幕更新,并在完成后重新启用更新.
一个想法是:
可能吗?或者你有其他更好的想法吗?谢谢!
我在15年来使用Delphi的经历中第一次遇到这个奇怪的问题。这是我在项目选项(XE4)中设置的图标:

这是编译后生成的应用程序图标:
我不知道该图标来自何处,也无法更改该图标(这确实使我发疯了)。
直到今天晚些时候,这个项目的图标已经可以使用了一年多。我尝试过的没有运气的事情:
project1.res文件并重新生成。.dproj文件,打开.dpr文件,然后让Delphi IDE创建一个空白的新.dproj文件。没运气。IconCache.db文件损坏,删除了该文件,然后重新启动Windows,无济于事。实际上,我使用Resource Hacker来确认不是Windows资源管理器显示了错误的图标,而是EXE中的图标资源是错误的……太奇怪了。.dproj文件从SVN 恢复到昨天(图标在昨天还可以)的修订,没有运气。您还建议我尝试一下吗?谢谢!
我正在为Delphi评估现有的依赖注入库,并且由于其简单性而确定了这个delphidicontainer - 它只需要一个单元文件!
但是,有一件事我不明白 - 在这个示例文件的底部:
initialization
//with those lines the linked will include the actual code for the services
TCSVDataService.Register;
TPaddedDataService.Register;
Run Code Online (Sandbox Code Playgroud)
这些Register方法是空的,但是,如果我在初始化部分中注释掉这两行,DIContainer.Get('dataservice') as TDataService则会失败.
为什么?这些空方法是什么?
我想使用我刚刚编写的以下函数将字符串值转换为全局内存句柄,反之亦然.
但是StrToGlobalHandle()导致我的测试程序挂起.所以GlobalHandleToStr()是不可测试的,我也想知道我的代码是否合乎逻辑.
function StrToGlobalHandle(const aText: string): HGLOBAL;
var
ptr: PChar;
begin
Result := 0;
if aText <> '' then
begin
Result := GlobalAlloc(GMEM_MOVEABLE or GMEM_ZEROINIT, length(aText) + 1);
if Result <> 0 then
begin
ptr := GlobalLock(Result);
if Assigned(ptr) then
begin
StrCopy(ptr, PChar(aText));
GlobalUnlock(Result);
end
end;
end;
end;
function GlobalHandleToStr(const aHandle: HGLOBAL): string;
var
ptrSrc: PChar;
begin
ptrSrc := GlobalLock(aHandle);
if Assigned(ptrSrc) then
begin
SetLength(Result, Length(ptrSrc));
StrCopy(PChar(Result), ptrSrc);
GlobalUnlock(aHandle);
end
end;
Run Code Online (Sandbox Code Playgroud)
测试代码:
procedure TForm3.Button1Click(Sender: TObject);
var …Run Code Online (Sandbox Code Playgroud) 在Delphi7中,TControl.Perform()接受负值wParam参数,这是它是如何应该做的,因为例如,EM_LINEFROMCHAR WINAPI消息所期望-1的wParam.
但是在Delphi XE4下,数据类型wParam已更改为NativeUInt,这将不接受负整数.
这是Delphi RTL的一个错误,或者我错误地理解它?谢谢.
有几种方法可以获取给定扩展的描述和默认图标(没有完整路径),例如"*.doc"我想获得"Microsoft Word文档"和相关图标,您认为这将是最快的以下之一:
搜索注册表:
调用API ShGetFileInfo.我相信这有点慢.
根据Rob的说法,这里:如何使用Delphi从文件扩展名中获取图标和描述?
将IExtractIcon接口称为"更灵活,更高效"的替代方案.但它建议的顺序是使用IShellFolder接口,然后调用GetUIObjectOf获取文件的IExtractIcon接口,然后调用GetIconLocation和Extract来检索图标的句柄.(但是这个方法无法读取扩展描述?)
由于速度非常重要,因为我需要读取系统中所有文件类型的信息.
非常感谢你!
delphi ×7
delphi-xe4 ×3
css ×1
delphi-2010 ×1
delphi-ide ×1
icons ×1
javascript ×1
json ×1
resources ×1
winapi ×1
windows ×1
xml ×1