2011-08-19 164 views
2

我正在尝试访问第三方应用程序中的TE Edit(来自ter32.dll)中的文本。 (在这个here上的第一篇文章)我看穿了API并试图动态加载dll以访问函数。不幸的是,ter32.dll的这个(售后返工)有一些依赖关系。我试图根据需要动态加载每个需要的DLL,但遇到了循环依赖。 ter32.dll需要x。 x需要y。 y不会加载,因为它需要x。我需要延迟静态加载吗?我当然希望不要因为我不想在我的应用程序中使用开销/膨胀/依赖项。解决第三方循环的dll依赖关系?

1)我错过了什么?
2)有没有办法解决这个问题?
3)有没有人有任何其他方式访问ter32.dll的TE编辑文本?

回答

3

加载DLL时,加载器将为您加载所有的依赖关系。这些依赖关系列在每个DLL的导入表中,加载器解析它们。你不需要做任何事情。

因此,我不明白你是如何得出你自己需要处理DLL依赖关系的结论。你是否以非标准的方式加载这个DLL?您是否需要WinSxS依赖项的清单,即是否需要MS C运行时?还有什么我们需要知道的吗?

所有这一切说,在我看来,将这个DLL加载到您的进程中不太可能有助于从具有自己独立虚拟内存的不同进程中提取文本。换句话说,我相当相信你目前尝试提取文本将会失败。解决虚拟内存障碍的方法是使用钩子在另一个进程中运行代码。

+0

+1问题:如果他有编辑的句柄,他可以使用GetWindowText(确切名称可能不同)吗?他必须已经拥有编辑主窗口的句柄(上一个问题)。你能不知怎的枚举窗口“父”的句柄?如果是这样,并且他有一些方法来确定正确的方法,那么他应该能够通过GetWindowText API获得该方法吗? –

+0

@marjan这个控件不是从EDIT子类化的,并且不会从GetWindowText返回它的内容 –

+0

@david - 首先,谢谢 - 您一直非常耐心,并且对我的其他帖子有很多帮助。我在这里必须缺少一些东西......(这不是我的日常工作!)我尝试动态加载ter32.dll:'dllHandle:= LoadLibrary(pwidechar(DllLocation +'\ ter32.dll'));' x(我忘记了哪个)需要首先加载。所以......我一直迷迷糊糊地在ter32.dll之前动态加载x ......等等。遇到循环依赖。现在...我只是再次尝试,以获取错误的确切文本,并加载DLL。现在尝试一下例程...谢谢! –