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

📄 vxdoutp.c

📁 MATLAB扩展编程by 孙永康.ZIP.有需要的朋友请来下载.
💻 C
字号:
#include "mex.h"
#include <windows.h>
#include <winioctl.h>

#define MEXHARD_INP     CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)
#define MEXHARD_OUTP    CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS)

HANDLE		hDevice;

void mexFunction( int nlhs, mxArray *plhs[],
				  int nrhs, const mxArray*prhs[] )
{

	unsigned short inbuf[2];	// 端口号和返回数据
	DWORD	 cbBytesReturned;	// 返回字节数
	double   *ptr;

	if (nrhs != 2)
		mexErrMsgTxt("Need one parameter\n");

	if (!mxIsNumeric(prhs[0]))
		mexErrMsgTxt("Port should be numeric\n");

	if (!mxIsNumeric(prhs[1]))
		mexErrMsgTxt("Byte should be numeric\n");

	// 获取端口号和输出数据
	ptr      = mxGetPr(prhs[0]);
	inbuf[0] = (unsigned short) (ptr[0]);
	inbuf[1] = (unsigned short) (ptr[1]);

	// 动态加载VxD。VxD文件必须在当前目录或系统目录
	// CreateFile认为以字符串"\\.\"开始的文件名为动态加载VxD
	hDevice = CreateFile("\\\\.\\MEXHARD.VXD", 0,0,0,
                        CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);

	if (hDevice == INVALID_HANDLE_VALUE)
		mexErrMsgTxt("Cannot open driver\n");

	//端口写操作
	DeviceIoControl(hDevice, MEXHARD_OUTP,
					inbuf, 2*sizeof(unsigned short),
					NULL, 0,
					&cbBytesReturned, NULL);

	// VxD卸载
	CloseHandle(hDevice);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -