精华内容
下载资源
问答
  • vc 共享内存 例子源代码.visual c++
  • VC共享内存

    2013-08-01 21:20:55
    本人自己封装的共享内存类,可以拿来直接使用,代码注释详细,使用说明也很详细。
  • 学习共享内存的好东西,我开始学的时候看的这个
  • 最近做的项目中,由用户双击启动的应用创建了共享内存,调用CreateFileMapping,按百度到的方式,发现在PHP以服务启动(运行在SYSTEM用户下)无法访问到该共享内存的内容,数值都是0. 后几经百度,发现确实是有命名...

    最近做的项目中,由用户双击启动的应用创建了共享内存,调用CreateFileMapping,按百度到的方式,发现在PHP以服务启动(运行在SYSTEM用户下)无法访问到该共享内存的内容,数值都是0.
    后几经百度,发现确实是有命名空间的问题,正确代码如下:

    CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024, “Global\SharedMemName”);
    注意这里最关键的是"Global\SharedMemName"里的Global,代表全局空间,带有这个全局空间的共享内存可以被所有用户或服务访问,不然就算PHP运行在相同用户下,但以服务方式启动时仍然无法访问到。
    典型代码粘贴如下:

    m_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, memSize, ZNDN_CLOUD_SHARED_MAP);
    	if (NULL == m_hFileMap)
    	{
    		AfxMessageBox("创建主体共享内存失败 CreateFileMapping!");
    		return -2;
    	}
    	if (GetLastError() == ERROR_ALREADY_EXISTS)
    	{ // 如果共享内存已经被其它程序打开,这时在_GetMemSizeFromSharedMem就能获取到一个正整数
    		TRACE("【提示】共享内存已被其它程序创建,尝试直接打开\n");
    		CloseHandle(m_hFileMap);
    		m_hFileMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, 1024, "Global\\SharedMemName");
    		if (NULL == m_hFileMap)
    		{
    			AfxMessageBox("打开共享内存失败 OpenFileMapping!");
    			return -3;
    		}
    		TRACE("【已存在】成功打开共享内存\n");
    	}
    	lpMemBuff = (BYTE*)MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    	if (lpMemBuff == NULL)
    	{
    		AfxMessageBox("内存映射到本地失败!");
    		return -6;
    	}
    
    展开全文
  • VC建立与修改共享内存区示例代码2009-11-28 17:34建立共享内存区: HANDLE hmap; usb_info p_lizhi; hmap = ::CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0,sizeof(struct USB_info),_T("share")); if(hmap !...
    VC建立与修改共享内存区示例代码
    2009-11-28 17:34

    建立共享内存区:
    HANDLE hmap;
    usb_info p_lizhi;
    hmap = ::CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0,sizeof(struct USB_info),_T("share"));
    if(hmap != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
    {
    p_lizhi = (usb_info)::MapViewOfFile(hmap,FILE_MAP_WRITE,0,0,0);

    strcpy(p_lizhi->logindomain,usbinfo.logindomain);
    strcpy(p_lizhi->loginname,usbinfo.loginname);
    strcpy(p_lizhi->loginpassword,usbinfo.loginpassword);
    strcpy(p_lizhi->username,usbinfo.username);
    }

    修改共享内存区的内容:
    HANDLE hmap,
    m_handle;
    usb_info p_lizhi;
    hmap = ::OpenFileMapping(FILE_MAP_WRITE,FALSE,_T("share"));
    if(hmap != NULL)
    {
    p_lizhi = (usb_info)::MapViewOfFile(hmap,FILE_MAP_WRITE,0,0,0);

    strcpy(p_lizhi->logindomain,usbinfo.logindomain);
    strcpy(p_lizhi->loginname,usbinfo.loginname);
    strcpy(p_lizhi->loginpassword,usbinfo.loginpassword);
    strcpy(p_lizhi->username,usbinfo.username);
    }  

     

    补充:
    关于创建共享内存的几点注意事项(经验:)
    1.共享名一定要独树一帜(否则就有可能因为与系统级别的对象同名而导致失败。虽然概率不大,但不得不防:)。
    2.在CreateFileMapping(...),OpenFileMapping(...),MapViewOfFile(..)函数中,映射的打开方式参数最好是一致的(否则有些问题令你头晕~~:)。
    3.每用MapViewOfFile(...)函数映射一次,都必须UnmapViewOfFile(...)一次。
    4.函数调用顺序问题:
    a.CreateFileMapping(...)/OpenFileMapping(...);
    b.MapViewOfFile(...);
    //...操作...
    c.UnmapViewOfFile(...);
    d.CloseHandle(...);  

    展开全文
  • 通过vc使用共享内存多大文件进行分析,并且输出html文件,代码可以重构
  • VC++6.0共享内存技术总结 程序1 -- 建立共享区,写数据: Cpp代码 int main(int argc, char* argv[])  {   HANDLE lhShareMemory;   char* lpBuffer = NULL;     lhShareMemory =...

    VC++6.0共享内存技术总结

    程序1 -- 建立共享区,写数据:

    Cpp代码
    1. int main(int argc, char* argv[])  
    2. {  
    3.  HANDLE lhShareMemory;  
    4.  char* lpBuffer = NULL;  
    5.    
    6.  lhShareMemory = CreateFileMapping(HANDLE(0xFFFFFFFF), NULL, PAGE_READWRITE,  
    7.   0, 10, "mySharedMemory");  
    8.    
    9.  if (NULL == lhShareMemory)  
    10.  {  
    11.    if (ERROR_ALREADY_EXISTS == GetLastError())  
    12.    {  
    13.     cout << "Already exists!";  
    14.    }  
    15.    else  
    16.    {  
    17.     cout << "Create Sheared Memory unsuccessfully!";  
    18.    }  
    19.    return 0;  
    20.  }  
    21.    
    22.  lpBuffer = (char*)MapViewOfFile(lhShareMemory, FILE_MAP_WRITE, 0, 0, 10);  
    23.  if (NULL == lpBuffer)  
    24.  {  
    25.    cout << "Get Share memory unsuccessfully!";  
    26.    return 0;  
    27.  } 
    28.  strcpy(lpBuffer, "hello"); 
    29.  cout << "进程通信:采用共享内存" << endl;  
    30.  cout << "写进程" << endl; 
    31.  cout << "写入数据:"<< endl<<lpBuffer << endl;  
    32.  Sleep(100000);  
    33.  UnmapViewOfFile(lpBuffer);
    34.  return 0; 
    35. }  
    36.    
    37. 程序2 -- 使用共享区,读数据:
    38. Cpp代码
      1. int main(int argc, char* argv[])  
      2. {  
      3.   HANDLE lhShareMemory;  
      4.   char* lpcBuffer;  
      5.    
      6.   lhShareMemory = OpenFileMapping(FILE_MAP_READ, false"mySharedMemory");  
      7.   if (NULL == lhShareMemory)  
      8.   {  
      9.    cout << "Open share memory unsuccessfully!" << endl;  
      10.    DWORD ldwError = GetLastError();  
      11.    cout << ldwError;  
      12.    return 0;  
      13.   }  
      14.    
      15.   lpcBuffer = (char*)MapViewOfFile(lhShareMemory, FILE_MAP_READ, 0, 0, 100);  
      16.   if (NULL == lpcBuffer)  
      17.   {  
      18.    cout << "Open share memory unsuccessfully!";  
      19.    return 0;  
      20.   }  
      21.   cout << "进程通信:采用共享内存" << endl;  
      22.   cout << "读进程" << endl;  
      23.   cout << "读入数据:" << endl;  
      24.   for (int i = 0; i < 100; ++i)  
      25.   {  
      26.    cout << *(lpcBuffer + i);  
      27.   }   
      28.  UnmapViewOfFile(lpcBuffer); 
      29.  return 0;  
    展开全文
  • 测试代码_共享内存

    2018-01-02 08:52:00
    1、VC6 #include <stdio.h> #include <windows.h> void main() { char* pc = "AAA"; HANDLE hMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4, pc); ...

    1、VC6

    #include <stdio.h>
    #include <windows.h>
    
    void main()
    {
        char* pc = "AAA";
        HANDLE hMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4, pc);
        if (hMem == NULL)
        {
            printf("CreateFileMapping return NULL");
            return;
        }
    
        void* pMem = MapViewOfFile(hMem, FILE_MAP_WRITE, 0, 0, 0);
        if (pMem == NULL)
        {
            printf("MapViewOfFile return NULL");
            return;
        }
    
        UnmapViewOfFile(pMem);
        CloseHandle(hMem);
    
    // ***
        hMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4, pc);
        if (hMem == NULL)
        {
            printf("CreateFileMapping return NULL");
            return;
        }
    
        pMem = MapViewOfFile(hMem, FILE_MAP_WRITE, 0, 0, 0);
        if (pMem == NULL)
        {
            printf("MapViewOfFile return NULL");
            return;
        }
    
        UnmapViewOfFile(pMem);
        CloseHandle(hMem);
    
    // ***
        hMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4, pc);
        if (hMem == NULL)
        {
            printf("CreateFileMapping return NULL");
            return;
        }
    
        pMem = MapViewOfFile(hMem, FILE_MAP_WRITE, 0, 0, 0);
        if (pMem == NULL)
        {
            printf("MapViewOfFile return NULL");
            return;
        }
    
        UnmapViewOfFile(pMem);
        CloseHandle(hMem);
    }

     

    2、

    3、

    4、

    5、

     

    转载于:https://www.cnblogs.com/DrMess/p/8175626.html

    展开全文
  • VC++的共享内存操作代码实现起来相对比较容易,但是用C#语言来实现,就有一定难度,由于工作需要,把以前VC开发的共享内存代码要用C#实现,别说,还费了不少周折,毕竟C#操作API函数和地址指针不是那么直接,还好,...
  • 内容索引:VC/C++源码,其它分类,日志,LLogTrace LLogTrace 通用日志调试工具VC代码,采用共享内存实现,作为调试程序用的LOG跟踪程序。包含了Delphi、VB、VC++三种语言的源代码版本。程序可以设置不同级别的LOG...
  • 代码进行了共享内存的通信演示。 此演示非常简单,只是演示如何使用,没有考虑性能、方式等,如果需要拿到真正的代码中使用,则需要考虑其它额外的工作,比如方式、效率等。 使用vc6.0
  • VC++的共享内存操作代码实现起来相对比较容易,但是用C#语言来实现,就有一定难度,由于工作需要,把以前VC开发的共享内存代码要用C#实现,别说,还费了不少周折,毕竟C#操作API函数和地址指针不是那么直接,还好,...
  • 原文地址:http://blog.csdn.net/hejishan/archive/2008/03/11/2169292.aspx VC++的共享内存操作代码实现起来相对比较容易,但是用C#语言来实现,就有一定难度,由于工作需要,把以前VC开发的共享内存代码要用C#实现...
  • VC++的共享内存操作代码实现起来相对比较容易,但是用C#语言来实现,就有一定难度,由于工作需要,把以前VC开发的共享内存代码要用C#实现,别说,还费了不少周折,毕竟C#操作API函数和地址指针不是那么直接,还好,...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 181
精华内容 72
关键字:

vc共享内存代码