在应用程序运行时编译.dll

时间:2012-08-28 19:55:56

标签: c++ dll

假设这种情况:应用程序( app.exe )正在使用多个.dll。我正在从应用程序使用的.dll之一调试一个函数 bugged_function() util.dll 。当我从这里调试 bugged_function()时,我意识到代码中的某些内容是错误的并且必须进行更改。

正常执行的步骤:

1。关闭 app.exe

2。修改函数中的代码

3. 重新编译util.dll

4. 重新运行 app.exe

我想要的是什么:

绕过第1步和第4步。要做到这一点,我需要以某种方式卸载,如果可能的话, util.dll 库,以便在编译时可以覆盖它。应用程序必须以某种方式重新加载库。

编辑1:

我不知道如何调用 bugged_function()。假设我只能访问 app.exe 使用的库 util.dll 的源代码。

编辑2:

我正在使用Visual Studio 2010,当我调试时,我会附加到 app.exe 进程。

2 个答案:

答案 0 :(得分:3)

如果应用程序通过run-time dynamic linking使用dll,则可以将其卸载(FreeLibrary或类似),然后重新加载(LoadLibrary或类似)。

如果应用程序通过load-time dynamic linking使用dll,我认为你运气不好。

编辑:我误解了这个问题。由于您无法修改app.exe,因此您必须依赖该应用程序的内置功能来进行运行时加载和卸载(如果有的话)。这完全取决于应用程序。

答案 1 :(得分:1)

Visual Studio可以编辑并继续。因此,如果您处于断点处,可以进行所需的更改,然后继续调试。 Visual Studio将在保持状态的同时编译和应用更改。

编辑:修改编辑并继续命名。