⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.c

📁 VSPM 虚拟串口软件可以将TCP/IP、UDP广播映射成本机的虚拟COM 口
💻 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 + -