函数从一个DLL调用另一个dll的同名函数

use*_*865 6 c++ visual-c++

我有一个特殊的问题.我有两个DLL,我们称之为DLL-A和DLL-B.

DLL-A有一个名为的函数f1(),DLL-B也有同名的函数f1().现在在DLL-A中,就像这样f1()调用f1()DLL-B.

DLL-A:

f1()
{
    f1(); //this is DLL-B function, but having the same name
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,它是f1()DLL-A 的递归调用吗?

Dav*_*nan 7

f1()内部函数体调用自身,导致无限递归,因为你嫌.一些可能的解决方

  • 将导入的DLL函数放在单独的命名空间中,以便您可以区分其名称.
  • 更改这些功能的名称以避免冲突.
  • 使用导入而不是隐式导入GetProcAddress.这允许您随意调用导入的函数.


Ray*_*hen 6

您可以将DLL-A中的函数名称更改为A_f1.

A_f1()
{
  f1() //this calls DLL-B's f1
} 
Run Code Online (Sandbox Code Playgroud)

在你的DEF文件中,写

EXPORTS
    f1 = A_f1
Run Code Online (Sandbox Code Playgroud)

这说"我内部调用的函数A_f1应该以名称的形式导出f1到其他组件." 这样,每个使用DLL-A并调用f1(期望获得函数A)的人都会得到A_f1.

我假设无法重命名导出的函数.如果可能,那么这是一个更清洁的解决方案.(我的猜测是,这是不可能的,因为你正试图破解视频游戏.)


par*_*mar 3

你在 f1 中编写 f1 的方式不会调用 DLL-B,而是无限递归。如果你想调用 DLL-B 函数,你必须使用GetProcAddress