函数从一个DLL调用另一个DLL的同名函数
function from one dll calling the same name function of another dll
我有一个特殊的问题。我有两个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()
吗?
函数体内部的f1()
调用自己,导致无限递归,正如您所怀疑的那样。一些可能的解决方案:
- 将导入的DLL函数放在一个单独的命名空间中,以便您可以区分它的名称。
- 更改这些函数的名称以避免冲突。
- 使用
GetProcAddress
显式导入而不是隐式导入。这允许你调用任何你喜欢的导入函数。
您可以将DLL-A中的函数名称更改为A_f1
。
A_f1()
{
f1() //this calls DLL-B's f1
}
在DEF文件中写入
EXPORTS
f1 = A_f1
这表示"我内部调用的A_f1
函数应该以f1
的名称导出到其他组件。"这样,所有使用DLL-A并调用f1
(期望得到函数A)的人将得到A_f1
。
我假设重命名导出的函数是不可能的。如果这是可能的,那么这是一个更干净的解决方案。(我猜这是不可能的,因为你正试图破解一款电子游戏。)
你写的方式f1在f1中不会调用DLL-B,而是一个无限递归。如果你想调用DLL-B函数,你必须使用GetProcAddress
如果您链接导出相同符号的两个对象文件,则应该得到编译器或链接器错误。比如"符号f1()的多重定义"
当然,如果您在一个dll中包含声明另一个函数的头文件,或者将两个二进制文件链接在一起,则可以使用
。要解决这个问题,请将函数放在名称空间中。
也许您可以通过以下方式更改名称:
#pragma comment(linker, "/export:MyFunc=_MyFunc@8")
相关文章:
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 调用 "project" 函数和调用 DLL 函数之间的区别
- 代码在 msvcrt .dll函数上设置断点失败
- VB.NET DLL中的C++DLL函数复制
- 在python-ctypes中声明变量并传递给dll函数
- 从 Python 调用 Windows DLL 函数时出错
- 调用 dll 函数时"Run-Time Check Failure #0 - The value of ESP"
- 列出 C# 中的 non-.NET DLL 函数
- 基本 DLL 函数
- 如何在不可修改的源代码中使用 DLL 函数?
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 如何在 lua cpp 模块中调用托管 c++ dll 函数
- 测试C++ DLL 函数
- 从 C# GUI 将 char * 参数传递给C++ dll 函数
- 使用指针调用C++ DLL 函数
- 在C++中导入 DLL 函数
- #VALUE!在 64 位 Excel 中调用 DLL 函数 (C++) 时
- 如何从 UWP 应用调用"libheif.dll"函数