#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);
}