这个是不能调用的,dll是window系统的库功能调用,stm32压根就没有window系统支持,别想了。
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案。
通过一个集成开发环境(μVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
公司简介:
Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。
Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。
Keil公司制造和销售种类广泛的开发工具,包括ANSI C编译器、宏汇编程序、调试器、连接器、库管理器、固件和实时操作系统核心(real-time kernel)。
有超过10万名微控制器开发人员在使用这种得到业界认可的解决方案。其Keil C51编译器自1988年引入市场以来成为事实上的行业标准,并支持超过500种8051变种。
编写如下结构数组
在DLL中
struct{struct {char FunctionName[LEN];void* Place;}APIS{LEN2], size_t Lenth;}Api;
void Dll_Import(char * FunName, void*Entry);将要给其他程序的的API安装
void* DllSerch(char* FunName);用于其他程序调用DLL程序。
void Dll_ImportAll(void);用于加载所有API
编译完成后打开map文件,将DllSerch与Dll_ImportAll的地址记录下来,例如0x08002400与0x08002600
在exe中,定义如下函数
void DllSteup(void)
{
typedef void (*Dll_ImportAllType)(void);
Dll_ImportAllType Dll_ImportAll = (Dll_ImportAllType)0x08002600;
Dll_ImportAll ();
}
void* DllExport(char * FunName)
{
typedef void* (*DllSerchType)(char * FunName);
DllSerchType DllSerch = (DllSerchType)0x08002400;//此地址为map文件中的地址
return DllSerch(FunName);
}
下面示例;
在Dll中有函数Usart_Transfer
void Usart_Transfer(char* Buffer, size_t Lenth);
在DLL中的调用Dll_ImportAll()实体中添加 Dll_Import("Usart_Transfer", Usart_Transfer);
在APP程序中
typedef void (*Usart_TransferType)(char* Buffer, size_t Lenth);
Usart_TransferType Usart_Transfer = (Usart_TransferType)0;
void main()
{
DllSteup();
Usart_Transfer = (Usart_TransferType)DllExport("Usart_Transfer");
Usart_Transfer((char*)("Success"), 8);
}