C++ 来自一个dll的函数调用另一个dll的同名函数
我有一个特殊的问题。我有两个DLL,我们叫它们DLL-A和DLL-B DLL-A有一个名为C++ 来自一个dll的函数调用另一个dll的同名函数,c++,visual-c++,C++,Visual C++,我有一个特殊的问题。我有两个DLL,我们叫它们DLL-A和DLL-B DLL-A有一个名为f1()的函数,DLL-B还有一个同名的函数,f1()。现在在DLL-A中,f1()像这样调用DLL-B的f1() DLL-A: f1() { f1(); //this is DLL-B function, but having the same name } 现在我的问题是,它会是来自DLL-a的f1()的递归调用吗 它们不会调用DLL-B,而是一个无限递归。如果要调用DLL-B函数,必须使用函
f1()
的函数,DLL-B还有一个同名的函数,f1()
。现在在DLL-A中,f1()
像这样调用DLL-B的f1()
DLL-A:
f1()
{
f1(); //this is DLL-B function, but having the same name
}
现在我的问题是,它会是来自DLL-a的
f1()
的递归调用吗 它们不会调用DLL-B,而是一个无限递归。如果要调用DLL-B函数,必须使用函数体中的f1()
调用自身,从而导致无限递归,正如您所怀疑的那样。一些可能的解决办法:
- 将导入的DLL函数放在单独的命名空间中,以便可以区分其名称李>
- 更改这些函数的名称以避免冲突
- 使用
显式导入,而不是隐式导入。这允许您随意调用导入的函数GetProcAddress
要解决此问题,请将函数放在名称空间中。您可以将DLL-A中函数的名称更改为
A\u f1
A_f1()
{
f1() //this calls DLL-B's f1
}
在DEF文件中,写入
EXPORTS
f1 = A_f1
这表示“我在内部调用的A_f1
函数应该以f1
的名称导出到其他组件。”这样,所有使用DLL-A并调用f1
(期望得到函数A)的人都将得到A_f1
A_f1()
{
f1() //this calls DLL-B's f1
}
我假设重命名导出的函数是不可能的。如果可能的话,这是一个更干净的解决方案。(我猜这是不可能的,因为你正在尝试破解一个视频游戏。)也许你可以通过以下方式更改名称:
#pragma comment(linker, "/export:MyFunc=_MyFunc@8")
关于黑客入侵视频游戏的好评论