// 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