c++调用动态库

#pragma once
#include<windows.h>
//#include<w中>,只三个,暂时不加处理

类 动调{//应该是一个dll对应一个动调
    H模块 针;无序映<串,远过程>库;
公:
    ~动调(){卸载();}
    显 动调(常 符*径){串 a=径;初化(a);}
    显 动调(串&径){初化(径);}
    空 初化(串&径){
        针=加载库(径.c串());
        如(空针==针){打印("加载失败\n");抛 0;}
    }//直接抛就行0
    极 卸载(){
        如(针==空针)中 真;
        动 b=释放库(针);如(!b)中 假;针=空针;中 真;
    }

    元<型名 T>动 取函数(常 符*a){
        串 b=a;中 取函数<T>(b);
    }//这里要<T>
    元<型名 T>函数<T>取函数(串&名){//没必要是常串
        动 i=库.查找(名);
        如(i==库.尾()){
            动 d=取过程地址(针,名.c串());
            如(!d)中 空针;压(库,名,d);
            i=库.查找(名);
        }//d为地址
        中((T*)(i->第二));
    }//T就是函数签名,最后自动转换成(函数<T>)了

    元<型名 T,型名...O>结果型<函数<T>(O...)>
    执行(常 符*名,O&&...o){//串/符*
        串 a=名;中 执行<T,O...>(a,前向<O>(o)...);
    }
    元<型名 T,型名...O>结果型<函数<T>(O...)>
    执行(串&名,O&&...o){
        动 f=取函数<T>(名);
        如(f==空针){
            串 s="找不到函数"+名;抛 异常(s.c串());
        }
        中 f(前向<O>(o)...);
    }
};

示例:

#define NOMINMAX
//去掉最小最大冲突
#include <windows.h>
#include <stdio.h>
//
#include <常用>
#include "动调.cpp"

空 主(){
    动调 p{"动态.dll"};
    动 t=p.取函数<符*()>("aa");
    打印(t());
    符*b=p.执行<符*()>("aa");
    打印(b);
}
posted @   zjh6  阅读(37)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示