我创建了一个项目dll,其中包含form1
和mainDll.cpp
,当我在目标进程中注入Dll时,一切正常,所有函数和form1
都被调用在mainDLL.cpp
中,form1
在目标进程的同一内存空间中打开,但今天我尝试将OpenFileDialog
放在此表单的按钮中。
button Code
{
OpenFileDialog1->ShowDialog();
}
问题是,当我点击按钮,然后由Dll冻结加载的表单,而不是目标进程,只有我注入的进程FORM1
;
答案 0 :(得分:-1)
好吧,没有人回答这个问题。 我在开始编码的时候就成功了。
两年后,我在游戏黑客和这些东西上工作,现在我可能会抱怨真正的问题。
可能c++ CLI .NET
需要一个最佳加载过程而不是注入的dll可以做到这一点,或者某个.net所需的dll可能与目标注入dll冲突,但是如果想要创建一个应用程序将是注入并打算在MS的许多OS中工作,这个dll不应该在这个内容中使用.NET技术。
如果是纯c ++(推荐):
- 使用尽可能低的msvc版本
- 使用\mt
进行编译(这不需要在目标计算机中进行可再发行的安装)
- 在编译器中使用选项以避免应用程序在加载必要的dll时找到未使用的函数(在visual studio LINKER / OPTIMIZATION(REFERENCES = YES,ENABLE COMDAT FOLDING = YES))。
-in linker/system/
系统最低要求的版本(5.01)为windows xp以后。
这一切都将避免在WINDOWS操作系统上的兼容性。