matlab 與VC進程間通訊

// ShareMemeryA_Write.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
//#include <Windows.h>
#include <iostream>
#include <afx.h>
#define _AFXDLL
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE lhShareMemory;
	char* lpBuffer = NULL;

	lhShareMemory = CreateFileMapping(HANDLE(0xFFFFFFFF), NULL, PAGE_READWRITE,
		0, 10, "mySharedMemory");

	if (NULL == lhShareMemory)
	{
		if (ERROR_ALREADY_EXISTS == GetLastError())
		{
			cout << "Already exists!";
		}
		else
		{
			cout << "Create Sheared Memory unsuccessfully!";
		}
		return 0;
	}

	lpBuffer = (char*)MapViewOfFile(lhShareMemory, FILE_MAP_WRITE, 0, 0, 100);
	if (NULL == lpBuffer)
	{
		cout << "Get Share memory unsuccessfully!";
		return 0;
	}
	int Cnt = 0;
	while(1)
	{
		CString temp;
		temp.Format("%d",Cnt);
		temp += "123456\n";
		strcpy(lpBuffer, temp);
		//cout << *(lpBuffer ) << endl;
		for (int i=0;i<10;i++)
		{
			cout << *(lpBuffer+i) ;
		}
		Sleep(1000);
		if (Cnt == 9)
		{Cnt= 0;	}
			Cnt ++;
	
		
	}

	Sleep(600000);
	UnmapViewOfFile(lpBuffer);
	system("pause");
	return 0;
}

matlab  端使用mex C++調用讀取共享內存數據段

// MexShareMem.m : 定義控制檯應用程序的入口點。
//

#include "mex.h"

#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;


void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
    int x = mxGetScalar(prhs[0]); //將第一個輸入參數轉爲Scalar標量,也就是單數值
   // printf("%d\n", x); //打印
     
    double *y;
    plhs[0] = mxCreateDoubleMatrix(1,6,mxREAL); //讓第一個輸出參數指向一個1*1的矩陣
    y = mxGetPr(plhs[0]); //獲得矩陣的第一個元素的指針
    //*y = 10; //將其賦值爲10

	HANDLE lhShareMemory;
	char* lpcBuffer;

	lhShareMemory = OpenFileMapping(FILE_MAP_READ, false, "mySharedMemory");
	if (NULL == lhShareMemory)
	{
		cout << "Open share memory unsuccessfully!" << endl;
		DWORD ldwError = GetLastError();
		cout << ldwError;
		return ;
	}

	lpcBuffer = (char*)MapViewOfFile(lhShareMemory, FILE_MAP_READ, 0, 0, 100);
	if (NULL == lpcBuffer)
	{
		cout << "Open share memory unsuccessfully!";
		return ;
	}
	/*
	while (1)
	{	
		for (int i = 0; i < 20; ++i)
		{
			cout << *(lpcBuffer + i);
		}
		
		//printf("%d\n", *y); //打印	
		//Sleep(10);
	}*/
	/**/
	*y = *(lpcBuffer) -48 ;
	*(y+1) = *(lpcBuffer+1)-48;
	*(y+2) = *(lpcBuffer+2)-48;
	*(y+3) = *(lpcBuffer+3)-48;
	*(y+4) = *(lpcBuffer+4)-48;
	*(y+5) = *(lpcBuffer+5)-48;
	*(y+6) = *(lpcBuffer+6)-48;
	
	
	
	//*y = *(lpcBuffer);
	//
	//system("pause");
	
	UnmapViewOfFile(lpcBuffer);
	
	//return ;
}

使用

mex MexShareMem.m

 

接着運行 MexShareMem

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章