Windows 调用Dll

windows 调用dll
dll 两种链接方式  : 动态链接和静态链接(链接亦称加载)


动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找。  
而静态链接就是把所有用到的函数全部链接到exe文件中。
动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入;  
而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。
 


1.生成  静态链接库 lib 和动态链接库 dll
 
新建工程 (newdll)  win32项目 ->  dll
添加.h文件 
betabinlib.h
#ifndef BETABINLIB_H
#define BETABINLIB_H
 
#ifdef NEWDLL_EXPORTS   //自动添加的宏   右键工程-属性-配置属性-预处理器-..定义
#define MYDLL_API extern "C" __declspec(dllexport)
#else
#define MYDLL_API extern "C" __declspec(dllimport)
#endif
 
MYDLL_API int add(int x, int y);  // 必须加前缀
#endif


添加.cpp文件  betabinlib.cpp
#include "stdafx.h"
#include "betabinlib.h"
 
int add(int x, int y)
{
    return x + y;
}
编译生成  .dll 和 .lib文件
 
2.使用


(1)dll的静态加载--将整个dll文件 加载到  .exe文件中
特点:程序较大,占用内存较大,但速度较快(免去 调用函数LOADLIB等)
测试:
需要  .lib  和 .dll两个文件     (.lib 做 引导用),.h文件


main.cpp
#include <stdio.h>
#include "betabinlib.h"
#include <Windows.h>
#pragma comment(lib, "newdll.lib")
 
int main()
{
    printf("2 + 3 = %d \n", add(2, 3));
    return 0;
}


(2) dll的动态加载--根据需要加载响应函数,随时可卸载。不会因为找不到dll, 导致程序不能运行(需要自己做判断处理)。


只需要 .lib文件,不需要 .h文件


main.cpp
#include <stdio.h>
#include <Windows.h>
 
int main()
{
    HINSTANCE h=LoadLibraryA("newdll.dll");
    typedef int (* FunPtr)(int a,int b);//定义函数指针
 
    if(h == NULL)
    {
    FreeLibrary(h);
    printf("load lib error\n");
    }
    else
    {
        FunPtr funPtr = (FunPtr)GetProcAddress(h,"add");
        if(funPtr != NULL)
        {
            int result = funPtr(3, 3);
            printf("3 + 3 = %d \n", result);
        }
        else
        {
            printf("get process error\n");
            printf("%d",GetLastError());
        }
        FreeLibrary(h);
    }
 
    return 0;
}
Windows操作系统提供了一种称为SNMP(Simple Network Management Protocol)的网络管理协议。该协议允许网络管理员通过查询和获取目标设备的信息来监控和管理网络设备。 在Windows中,要使用SNMP协议进行网络管理,我们可以调用DLL(Dynamic Link Library,动态链接库)文件来实现。DLL文件包含了一系列函数和程序代码,可以被不同的应用程序调用和使用。 要调用DLL文件进行SNMP操作,我们需要使用一种编程语言,如C++或C#来编写代码。通过代码,我们可以加载和初始化SNMP库,并使用相应的函数来执行SNMP命令。 首先,我们需要通过调用LoadLibrary函数来加载SNMP DLL文件。这会将DLL文件加载到我们的应用程序的地址空间中,并返回一个句柄,供我们后续使用。 然后,我们可以使用GetProcAddress函数来获取DLL中的函数地址。SNMP DLL文件通常会提供一些用于发送SNMP消息的函数,如SnmpOpen、SnmpGet等。我们可以通过GetProcAddress函数将这些函数的地址保存到变量中。 接下来,我们可以通过调用这些函数来执行特定的SNMP操作。例如,我们可以使用SnmpOpen函数来打开一个SNMP会话,使用SnmpGet函数来查询目标设备的特定信息,然后使用SnmpClose函数关闭会话。 在完成SNMP操作后,我们可以使用FreeLibrary函数来卸载DLL文件,并释放之前加载的资源。 需要注意的是,使用SNMP调用DLL需要有一定的编程经验和对SNMP协议的了解。对于不熟悉编程的用户,可以使用一些现成的SNMP管理软件来实现类似的功能,而无需直接调用DLL文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值