C++如何替换一个函数但仍然使用原来的函数?

标签 c++ opengl windows-xp function hook

我想修改 glBindTexture() 函数来跟踪之前绑定(bind)的纹理 ID。目前我刚刚为它创建了新函数,但后来我意识到如果我使用其他使用 glBindTexture 的代码:那么我的整个系统可能会崩溃。

那我该怎么做呢?

编辑: 现在,当我想到时,检查我是否应该绑定(bind)纹理是毫无用处的,因为 opengl 可能已经这样做了。但我仍然需要跟踪以前使用的纹理。

最佳答案

正如安德烈亚斯在评论中所说,你应该检查这是必要的。尽管如此,如果你想做这样的事情,并且你使用 gnu 链接器(你没有指定操作系统)你可以使用链接器选项:

--wrap glBindTexture

(如果直接给 gcc 你应该写):

-Wl,--wrap,glBindTexture

由于这是在链接器阶段完成的,因此您可以将新函数与现有库一起使用(编辑:“库”是指一些您可以重新编译但不想修改的现有代码)。

“替换”功能的代码如下所示:

void * __wrap_glBindTexture (GLenum target, GLuint texture) {
   printf ("glBindTexture wrapper\n");
   return __real_glBindTexture (target,texture);
}

关于C++如何替换一个函数但仍然使用原来的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3494889/

相关文章:

java - 着色器 Java OpenGL 代码内没有错误,但窗口内没有渲染任何内容

c++ - ld 找不到 glfw3

c++ - 如何使用 Visual Studio 2017 构建面向 Windows XP 的 Winsock2 (WS2_32.lib) 应用程序

php - 为什么 Curl 会比 Web 浏览器慢?

c++ - 每次复制实现移动赋值的非 const 对象时,我是否总是获得移动语义?

c++ - 如何将二维 vector 中的对象设置为空指针 [C++]

c++ - 依赖图的设计模式

C++ 在尝试比较字符串 "=="或 CString.Find() 时什么更好

opengl - 早期模板剔除,无需早期 z 剔除

ruby - 使用 mechanize gem 时出现错误 "getaddrinfo: No such host is known. (Socke tError)"