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