📄 unit1.c
字号:
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <mem.h>
#pragma argsused
void __declspec(dllexport) _stdcall InitExtDll(int *act)
{
//初始化扩展DLL资源
//VSPM在加载成功后调用此函数
*act=0;
};
void __declspec(dllexport) _stdcall FreeExtDll(int *act)
{
//释放扩展资源
//在DLL释放前,VSPM调用此函数
*act=0;
}
void __declspec(dllexport) _stdcall VComEvent(void *idata,int *act)
{
//虚拟串口消息
*act=0;
}
void __declspec(dllexport) _stdcall VComQueryEvent(char *VComName,
void *odata,int *odatasize,
int *act)
{
//VComQueryEvent->虚拟串口,在串口对应的TCP/IP连接失效时,VSPM调用此函数
//此函数用于向应用程序发出串口数据报文。
//相当于应用程序从虚拟串口收到由TVComQueryEvetn产生的数据。
//参数:虚拟串口名称,输出数据,输出数据尺寸,
//act操作//(dll返回:act=0-发送数据)
//(dll返回:act=1-不发送数据,忽略此函数功能)
//!!VSPM Server模式下不调用此函数!!
//不需要此函数
*act=1;
};
//NetworkQuery
void __declspec(dllexport) _stdcall NetQueryEvent(char *VComName,
void *odata,int *odatasize,
int *act)
{
//不需要此函数
//NetQueryEvent->TCP/IP网络模拟发送函数,只有当网络连接正常时,
//并且虚拟串口关闭时才会调用此函数
//参数:虚拟串口名称,输出数据,输出数据尺寸,
//act操作 //(dll返回:act=0-发送数据)
//(dll返回:act=1-不发送数据,忽略此函数功能)
*act=1;
};
//虚拟串口接收
void __declspec(dllexport) _stdcall VComRecEvent(char *VComName,
void *idata,int idatasize,
void *odata,int *odatasize,
int *act)
{
//对应的虚拟串口打开后,由VSPM线程一直调用此函数。
//VComName:虚拟串口名,例如"COM2"
//idata:收到的虚拟串口数据(对于用户来说相当于发送到串口),idatasize:收到的数据长度
//odata:返回给VSPM的数据,odatasize:返回给VSPM数据的长度
//act:返回0-数据处理成功,1-数据处理失败
char s1[256];
char *test="\r\n用C语言制作的VSPM扩展DLL,虚拟串口接收发送到网络:";
*act=1;
//如果没有数据返回
if (idatasize<=0) return;
memmove(s1,test,strlen(test));
memmove(s1+strlen(test),idata,idatasize);
memcpy(odata,s1,strlen(test)+idatasize);
*odatasize=strlen(odata);
*act=0;
Sleep(1);
};
void __declspec(dllexport) _stdcall AfterVComRecEvent(
char *VComName,
void *idata,int idatasize,
void *odata,int *odatasize,
int *act)
{
//发送数据到TCP/IP后执行此函数
*odatasize=idatasize;
*act=0;
}
void __declspec(dllexport) _stdcall NetRecEvent(
char *VComName,
void *idata,int idatasize,
void *odata,int *odatasize,
int *act)
{
//对应的虚拟串口打开后,由VSPM线程一直调用此函数。
//当从网络接收到数据时,调用此函数
//VComName:虚拟串口名,例如"COM2"
//idata:收到的网络数据,idatasize:收到的网络数据长度
//odata:返回给VSPM的数据,odatasize:返回给VSPM数据的长度
//act:返回0-数据处理成功,1-数据处理失败
char s1[256];
char *test="\r\n用C语言制作的VSPM扩展DLL,网络收到数据发送到虚拟串口:";
*act=1;
//如果没有数据返回
if (idatasize<=0) return;
memmove(s1,test,strlen(test));
memmove(s1+strlen(test),idata,idatasize);
memcpy(odata,s1,strlen(test)+idatasize);
*odatasize=strlen(odata);
*act=0;
Sleep(1);
}
void __declspec(dllexport) _stdcall AfterNetRecEvent(
char *VComName,
void *idata,int idatasize,
void *odata,int *odatasize,
int *act)
{
//不处理此函数
*odatasize=idatasize;
*act=0;
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -