内存映射文件写入C++;读取mql4 嗨,各位,我想读一个C++程序创建的内存映射文件,我用C++中的for创建内存映射文件,我想在我的Meta Atter 4中读取字符串,我写这个代码< /p> #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_minimum 0 #property indicator_buffers 1 #property indicator_color1 Blue #define FILE_MAP_READ 4 #define BUF_SIZE 256 extern string szName = "MyFileMappingObject"; //extern string szName = "Global\\dllmemfilemap"; int handle = 0; string Data; #import "kernel32.dll" int OpenFileMappingA(int dwDesiredAccess, bool bInheritHandle, string lpName); string MapViewOfFile(int hFileMappingObject, int dwDesiredAccess, int dwFileOffsetHigh, int dwFileOffsetLow, int dwNumberOfBytestoMap); int CloseHandle( int handle); int UnmapViewOfFile(string lpBaseAddress); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { handle = OpenFileMappingA(FILE_MAP_READ, FALSE, szName); if(handle == 0) { Alert("Could not open file mapping object", GetLastError()); } else { Data = MapViewOfFile(handle, FILE_MAP_READ, 0, 0, BUF_SIZE); Alert(Data); UnmapViewOfFile(Data); CloseHandle(handle); } return (0); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { return(0); }

内存映射文件写入C++;读取mql4 嗨,各位,我想读一个C++程序创建的内存映射文件,我用C++中的for创建内存映射文件,我想在我的Meta Atter 4中读取字符串,我写这个代码< /p> #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_minimum 0 #property indicator_buffers 1 #property indicator_color1 Blue #define FILE_MAP_READ 4 #define BUF_SIZE 256 extern string szName = "MyFileMappingObject"; //extern string szName = "Global\\dllmemfilemap"; int handle = 0; string Data; #import "kernel32.dll" int OpenFileMappingA(int dwDesiredAccess, bool bInheritHandle, string lpName); string MapViewOfFile(int hFileMappingObject, int dwDesiredAccess, int dwFileOffsetHigh, int dwFileOffsetLow, int dwNumberOfBytestoMap); int CloseHandle( int handle); int UnmapViewOfFile(string lpBaseAddress); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { handle = OpenFileMappingA(FILE_MAP_READ, FALSE, szName); if(handle == 0) { Alert("Could not open file mapping object", GetLastError()); } else { Data = MapViewOfFile(handle, FILE_MAP_READ, 0, 0, BUF_SIZE); Alert(Data); UnmapViewOfFile(Data); CloseHandle(handle); } return (0); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { return(0); },c++,mql4,C++,Mql4,但是不打开OpenFileMappingA,总是返回0,有人知道吗?非常感谢在尝试OpenFileMapping之前,您需要调用CreateFileMapping 见示例: #包括 #包括 #包括 #包括 #定义BUF_大小256 TCHAR szName[]=TEXT(“全局\\MyFileMappingObject”); TCHAR szMsg[]=文本(“来自第一个进程的消息”); int_tmain() { 处理hMapFile; LPCTSTR-pBuf; hMapFile=Creat

但是不打开OpenFileMappingA,总是返回0,有人知道吗?非常感谢

在尝试
OpenFileMapping
之前,您需要调用
CreateFileMapping

见示例:

#包括
#包括
#包括
#包括
#定义BUF_大小256
TCHAR szName[]=TEXT(“全局\\MyFileMappingObject”);
TCHAR szMsg[]=文本(“来自第一个进程的消息”);
int_tmain()
{
处理hMapFile;
LPCTSTR-pBuf;
hMapFile=CreateFileMapping(
无效的\u句柄\u值,//使用分页文件
NULL,//默认安全性
PAGE_READWRITE,//读/写访问权限
0,//最大对象大小(高阶DWORD)
BUF_SIZE,//最大对象大小(低阶DWORD)
szName);//映射对象的名称
if(hMapFile==NULL)
{
_tprintf(文本(“无法创建文件映射对象(%d)。\n”),
GetLastError());
返回1;
}
pBuf=(LPTSTR)MapViewOfFile(hMapFile,//映射对象的句柄
文件\u映射\u所有\u访问,//读/写权限
0,
0,
大小);
if(pBuf==NULL)
{
_tprintf(文本(“无法映射文件(%d)的视图)。\n”),
GetLastError());
CloseHandle(hMapFile);
返回1;
}
CopyMemory((PVOID)pBuf,szMsg,(_tcslen(szMsg)*sizeof(TCHAR));
_getch();
未经批准的文件(pBuf);
CloseHandle(hMapFile);
返回0;
}

抱歉,我链接了一个错误的链接,我只关注您的示例您在哪里调用了
CreateFileMapping
?在你的示例代码中没有任何地方。我在C++中有第一个进程,这个过程是一样的,(你和我发送的是同一个),并且写字符串“从第一个进程中得到消息”是正确的,因为如果我用C++中的第二个进程测试,工作得很好,但是当我试图在Meta Atter中运行MQL4时,在变量句柄o_OEUREKAAAAA中始终返回0我必须使用此OpenFileMappingW(FILE_MAP_READ,False,szName);而不是OpenFileMappingA
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>

#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
TCHAR szMsg[]=TEXT("Message from first process.");

int _tmain()
{
   HANDLE hMapFile;
   LPCTSTR pBuf;

   hMapFile = CreateFileMapping(
                 INVALID_HANDLE_VALUE,    // use paging file
                 NULL,                    // default security
                 PAGE_READWRITE,          // read/write access
                 0,                       // maximum object size (high-order DWORD)
                 BUF_SIZE,                // maximum object size (low-order DWORD)
                 szName);                 // name of mapping object

   if (hMapFile == NULL)
   {
      _tprintf(TEXT("Could not create file mapping object (%d).\n"),
             GetLastError());
      return 1;
   }
   pBuf = (LPTSTR) MapViewOfFile(hMapFile,   // handle to map object
                        FILE_MAP_ALL_ACCESS, // read/write permission
                        0,
                        0,
                        BUF_SIZE);

   if (pBuf == NULL)
   {
      _tprintf(TEXT("Could not map view of file (%d).\n"),
             GetLastError());

       CloseHandle(hMapFile);

      return 1;
   }


   CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
    _getch();

   UnmapViewOfFile(pBuf);

   CloseHandle(hMapFile);

   return 0;
}