显示调用动态链接库
来源:互联网 发布:大观园网络电视 编辑:程序博客网 时间:2024/06/14 15:53
李国帅 编写于2006-5-10 15:16
参考调用链接库的方法可以看出,使用显示调用要好得多,可以更好的节省动态内存空间.
如果要找代码,codeproject是首选.一个简单的调用例程
#include "windows.h"//GetProcAddresses//Argument1: hLibrary - Handle for the Library Loaded//Argument2: lpszLibrary - Library to Load//Argument3: nCount - Number of functions to load//[Arguments Format]//Argument4: Function Address - Function address we want to store//Argument5: Function Name - Name of the function we want//[Repeat Format]////Returns: FALSE if failure//Returns: TRUE if successfulBOOL GetProcAddresses( HINSTANCE *hLibrary, LPCSTR lpszLibrary, INT nCount, ... ){ va_list va; va_start( va, nCount ); if ( ( *hLibrary = LoadLibrary( lpszLibrary ) ) != NULL ) { FARPROC * lpfProcFunction = NULL; LPSTR lpszFuncName = NULL; INT nIdxCount = 0; while ( nIdxCount < nCount ) { lpfProcFunction = va_arg( va, FARPROC* ); lpszFuncName = va_arg( va, LPSTR ); if ( ( *lpfProcFunction = GetProcAddress( *hLibrary, lpszFuncName ) ) == NULL ) { lpfProcFunction = NULL; return FALSE; } nIdxCount++; } } else { va_end( va ); return FALSE; } va_end( va ); return TRUE;}typedef int ( WINAPI *MESSAGEBOX ) ( HWND , LPCSTR, LPCSTR, DWORD );typedef int ( WINAPI *MESSAGEBOXEX ) ( HWND , LPCSTR, LPCSTR, DWORD , WORD );void main(void){ MESSAGEBOX lpfMsgBox = NULL; MESSAGEBOXEX lpfMsgBoxEx = NULL; HINSTANCE hLib; if(GetProcAddresses( &hLib, "User32.dll", 2, &lpfMsgBox, "MessageBoxA", &lpfMsgBoxEx, "MessageBoxExA" ) ) { lpfMsgBox( 0, "Test1", "Test1", MB_OK ); lpfMsgBoxEx( 0, "Test2", "Test2", MB_OK, MAKELANGID( LANG_ENGLISH, SUBLANG_ENGLISH_US ) ); } if ( hLib != NULL ) FreeLibrary( hLib );}
自定义的dll也是可以的.
typedef int ( WINAPI *CREATEDLL3 )();CREATEDLL3 lpfCreateDll3 = NULL;HINSTANCE hLib;if(GetProcAddresses( &hLib, "DLL3.dll", 1, &lpfCreateDll3, "CreateDll3")){ lpfCreateDll3();}
当时使用vc7生成了一个win32dll能够调用dll文件,但是不能调用里面自动生成的函数,可以看到里面的函数表示和mfc的不同。
我使用前面的josua改动过的dll,dll根本不能调用。
只好使用隐式调用了。直接引用项目,先运行了再说。
我知道了为什么winrtp atlcom总是不能引用成功,原来没有注册。
阅读全文
0 0
- 显示调用动态链接库
- 显示调用c++动态链接库
- DLL--显示链接调用符号表接口的非MFC动态链接库
- JNative 调用动态链接库 调用动态链接库函数
- C++对dll链接库的显示(动态)调用和隐式(静态)调用
- 编译链接动态链接库生成调用
- 动态链接库的调用
- 调用动态链接库API
- C#调用动态链接库
- JNative 调用动态链接库
- javay调用动态链接库
- C# 调用动态链接库
- 动态链接库的调用
- C#调用动态链接库
- C++调用动态链接库
- C#调用动态链接库
- C#调用动态链接库
- Matlab调用动态链接库
- DPDK 多进程支持总结
- 理解spring父子容器
- RPN 区域推荐网络
- leetcode 670. Maximum Swap
- String、StringBuffer、StringBuilder区别
- 显示调用动态链接库
- tensorflow API: tf.concat
- 首届“奥威杯”大数据创新应用大赛圆满举行!
- K近邻算法
- springMVC系列之(四) spring+springMVC+hibernate 三大框架整合
- Hbuider快捷键
- Week 5算法分析作业
- python计算分位数
- WeakHashMap的作用 , Talk is cheap, Show you the code.