调用不同dll中的同一函数
2012-07-19 11:00
281 查看
就是使用LoadLibrary取得相应的dll句柄,然后使用GetProcAddress取得相应函数接口的入口地址,
通过函数指针调用就行了。可以使用Dependency Walk 工具查看dll中有哪些接口。
我和我的组长各写了一个,高下立断。
主要我没有判断NULL值,需要注意。
我的代码:
leader代码:
通过函数指针调用就行了。可以使用Dependency Walk 工具查看dll中有哪些接口。
我和我的组长各写了一个,高下立断。
主要我没有判断NULL值,需要注意。
我的代码:
class DX8Interface { typedef HRESULT (WINAPI * DX8_D3DXCreateSprite)(LPDIRECT3DDEVICE8, LPD3DXSPRITE *); public: static HRESULT WINAPI D3DXCreateSprite(LPDIRECT3DDEVICE8 pDevice, LPD3DXSPRITE* ppSprite); static bool Initial(); static bool Free(); private: static HMODULE m_hDX8Module; static DX8_D3DXCreateSprite m_pfD3DXCreateSprite; }; DX8Interface::DX8_D3DXCreateSprite DX8Interface::m_pfD3DXCreateSprite = NULL; HMODULE DX8Interface::m_hDX8Module = NULL; HRESULT WINAPI DX8Interface::D3DXCreateSprite(LPDIRECT3DDEVICE8 pDevice, LPD3DXSPRITE* ppSprite) { if(NULL == m_pfD3DXCreateSprite) Initial(); return m_pfD3DXCreateSprite(pDevice, ppSprite); } bool DX8Interface::Initial() { m_hDX8Module = ::LoadLibrary(_T("D3DX8ab.dll")); m_pfD3DXCreateSprite = (DX8_D3DXCreateSprite)GetProcAddress(m_hDX8Module, "D3DXCreateSprite"); return true; } bool DX8Interface::Free() { return ::FreeLibrary(m_hDX8Module); }
leader代码:
class DX9Interface { typedef HRESULT (WINAPI *D3DXCreateSpriteFun)(LPDIRECT3DDEVICE9, LPD3DXSPRITE*); public: static bool Initial() { m_hModule = LoadLibrary(_T("D3dx9_42.dll")); if(m_hModule == NULL) { TRACEE(_T("Load D3dx9_42.dll failed.")); return false; } m_pD3DXCreateSprite = (D3DXCreateSpriteFun)GetProcAddress(m_hModule, "D3DXCreateSprite"); if(m_pD3DXCreateSprite == NULL) { TRACEE(_T("Get D3DXCreateSpriteFun for D3dx9_42.dll failed.")); return false; } return true; } static void Destory() { m_pD3DXCreateSprite = NULL; if(m_hModule) { FreeLibrary(m_hModule); m_hModule = NULL; } } static HRESULT D3DXCreateSprite(LPDIRECT3DDEVICE9 pDevice, LPD3DXSPRITE* ppSprite) { if(m_pD3DXCreateSprite == NULL) { if(!Initial()) { return S_FALSE; } } return m_pD3DXCreateSprite(pDevice, ppSprite); } private: static HMODULE m_hModule; static D3DXCreateSpriteFun m_pD3DXCreateSprite; };
相关文章推荐
- 动态加载DLL实现不同DLL的相同导出函数调用问题
- Qt调用dll中的功能函数
- DLL模块例1:使用.def模块导出函数,规范修饰名称,显示连接调用dll中函数
- 中科院ICTCLAS系统,ICTCLAS.dll的函数调用示例(C语言)
- 对非托管 DLL 函数的“平台调用”调用(zz)
- <javascript>this不同调用模式引起的问题,函数内部调用函数this无效
- T-SQL 在SQLServer中调用Dll(c#函数)
- C#中如何加载dll并调用其函数
- DLL导出函数方法以及动态调用
- 第十周项目一 阅读下面的定义,请说出在测试函数中不同情况的调用产生的结果(5 e)
- GPU(CUDA)学习日记(二)续------ VS2010 不同工程之间调用DLL
- javascript中四种函数调用模式及对this的不同绑定
- 静or动态库中的全局变量被不同的dll调用修改,其值是否独立?
- 关于显式调用DLL、隐式调用DLL和查看DLL输出函数
- 一个接口调用多个不同的函数
- 第十一周项目—阅读程序,说出在测试函数中不同情况的调用产生的结果(5 a)
- 调用未知DLL中的导出函数
- 如何调用dll文件中的函数
- Tab不同子对话框间函数互相调用
- 函数调用的时候出现不同的js调用方法