如何解决从不在界面中的另一个单元访问简单过程
我想为我报告为RSP-30853的问题创建一个补丁
简而言之,在加载我的资源DLL之后,我需要调用sysutils.ResStringDeleteAllModules
以便刷新缓存的资源字符串。不幸的是,该例程不在interface
部分中,并且在我使用运行时程序包时,修改和重新编译sysutils.pas
本身对我来说不会这样做。
所以我正在寻找一种或多或少的 hacky 方式来称呼它。我尝试过,但没有找到通过TRTTIContext的路线。
我也对此进行了尝试(针对我的特定问题,后退到LoadResStringFunc=nil
),但无济于事:
procedure DropResStringCache;
begin
var PModule:=LibModuleList;
var P:=nil;
while Assigned(PModule) do
begin
P:=GetProcAddress(PModule^.Instance,'ResStringDeleteAllModules');
if Assigned(P) then
break;
PModule:=PModule.Next;
end;
if Assigned(P) then
TProcedure(P)()
else LoadResStringFunc:=nil;
end;
解决方法
如果您有madExcept,则可以使用其GetMapFileAddress
方法来检索该方法的地址,如下所示:
var MethodAddr: Pointer := GetMapFileAddress(GetModuleName(HInstance),'System.SysUtils','ResStringDeleteAllModules');
我相信JCL还支持运行时映射文件(或jdbg)解析,这将允许类似的功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。