博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Using Run-Time Dynamic Linking(使用运行时动态链接库)
阅读量:5966 次
发布时间:2019-06-19

本文共 2208 字,大约阅读时间需要 7 分钟。

// A simple program that uses LoadLibrary and // GetProcAddress to access myPuts from Myputs.dll. #include 
#include
typedef int (__cdecl *MYPROC)(LPWSTR); int main( void ) { HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; // Get a handle to the DLL module. hinstLib = LoadLibrary(TEXT("MyPuts.dll")); // If the handle is valid, try to get the function address. if (hinstLib != NULL) { ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); // If the function address is valid, call the function. if (NULL != ProcAdd) { fRunTimeLinkSuccess = TRUE; (ProcAdd) (L"Message sent to the DLL function\n"); } // Free the DLL module. fFreeResult = FreeLibrary(hinstLib); } // If unable to call the DLL function, use an alternative. if (! fRunTimeLinkSuccess) printf("Message printed from executable\n"); return 0;}
 
 

 
int (__cdecl *MYPROC)(LPWSTR);  
int 表示函数的返回值为 int     若是  TLSConnectToLsServer 
函数,则应为  TLS_HANDLE
(__cdecl *MYPROC) 说明这是一个函数指针,调用方式为 __cdecl (还有 _stdcall )
LPWSTR 说明此函数有一个参数,类型为 LPWSTR
(函数指针语法就是要求这样定义的,不是为什么要用,而是必须要用)
 

使用LoadLibrary把dll文件load进内存,使用GetProcAddress得到函数地址就可以使用了

#include 
#include
#include
#include
using namespace std;void main(void){ typedef int (__stdcall *PFUNCTION)( int k,int i); //声明参数类型,以后会用到PFUNCTION HMODULE hLib = ::LoadLibrary("xx.dll"); if ( NULL == hLib ) { perror("装载DLL文件错误:"); } else { PFUNCTION myAddFunction=myAddFunction=(PFUNCTION)::GetProcAddress(hLib,"ConnectEx");//ConnectEx是动态库中的方法 if ( NULL == myAddFunction) { perror("装载的DLL文件中无对应的函数:"); } else { int k=myAddFunction(1,2); cout <
<

 

转载于:https://www.cnblogs.com/LeoGodfrey/p/3643897.html

你可能感兴趣的文章
EasyUI基础入门之Pagination(分页)
查看>>
ORACLE中CONSTRAINT的四对属性
查看>>
python 迭代器 生成器
查看>>
dorado基本事件样例
查看>>
Unity寻路的功能总结
查看>>
Python访问PostGIS(建表、空间索引、分区表)
查看>>
quick-cocos2d-x开发环境Lua for IntelliJ IDEA的安装
查看>>
Target-Action回调模式
查看>>
换个红圈1微信头像恶搞一下好友
查看>>
Socket网络编程--简单Web服务器(3)
查看>>
ylbtech_dbs_article_五大主流数据库模型
查看>>
Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
查看>>
10行Python代码解决约瑟夫环(模拟)
查看>>
一个简单好用的日志框架NLog
查看>>
超级硬盘数据恢复软件 4.6.5.0注冊码破解版
查看>>
一款基于jquery和css3实现的摩天轮式分享按钮
查看>>
Android创建启动画面
查看>>
Linux中date命令的各种实用方法--转载
查看>>
mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
查看>>
苹果企业版帐号申请记录
查看>>