• 4436阅读
  • 1回复

我在按钮1中创建一块内存,在按钮2中访问这块内存,却找不到这块内存,代码贴出来。请高手人看看 [复制链接]

上一主题 下一主题
离线redegao
 

只看楼主 倒序阅读 楼主  发表于: 2006-07-11
#include "qtsln1.h"
#include "windows.h"

int QTSln1::recMax = 0;
int QTSln1::CONTROL_FRAME = 0;
int QTSln1::sendMax = 0;
HANDLE QTSln1::hFileMap = (HANDLE)0;
HANDLE QTSln1::hView = (HANDLE)0;
HANDLE QTSln1::hCreateFileMap = (HANDLE)0;
HANDLE QTSln1::hOpenFileMap = (HANDLE)0;
HANDLE QTSln1::hOpenMapView = (HANDLE)0;

QTSln1::QTSln1(QWidget *parent, Qt::WFlags flags)
  : QMainWindow(parent, flags)
{
  ui.setupUi(this);
  QTSln1::recMax = 10;
  QTSln1::CONTROL_FRAME = 25;
  QTSln1::sendMax = 10;
}

QTSln1::~QTSln1()
{

}


void QTSln1::on_pbtnSend_clicked()
{
 
}
void QTSln1::OpenMemDBCS()
{
 
}

void QTSln1::on_pbtnSend_2_clicked()
{
  ControlStruct* pSendCtlFrm;
  char* MapName = "Command";
  QTSln1::hCreateFileMap = CreateFileMapping(
    (HANDLE)0xFFFFFFFF,
    NULL,
    PAGE_READWRITE,
    0,
      QTSln1::CONTROL_FRAME * QTSln1::sendMax,
    (LPCWSTR)MapName);
  if (QTSln1::hCreateFileMap != NULL)
  {
      QTSln1::hView = MapViewOfFile( QTSln1::hCreateFileMap, FILE_MAP_ALL_ACCESS, 0, 0, QTSln1::CONTROL_FRAME * QTSln1::sendMax);
    if ( QTSln1::hView != NULL)
    {
        for (int i = 0; i < QTSln1::sendMax; i++)
        {
          pSendCtlFrm = (ControlStruct*) ((LPBYTE) QTSln1::hView + i * QTSln1::CONTROL_FRAME);
          pSendCtlFrm->id = i;
        }
    }
    else
    {
        QString str;
        str = QString::fromLocal8Bit("内存未打开!");
        QMessageBox::information( this, tr("Info!"), str, QMessageBox::Ok );
    }
  }
  else
  {
    QString str;
    str = QString::fromLocal8Bit("内存未创建!");
    QMessageBox::information( this, tr("Info!"), str, QMessageBox::Ok );
  }
}

void QTSln1::on_pbtnSend_3_clicked()
{
  ControlStruct* pSendCtlFrm;
  char* MapName = "Command";
  QTSln1::hOpenFileMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, (LPCTSTR)MapName);
  if (QTSln1::hOpenFileMap != NULL)
  {
      QTSln1::hOpenMapView = MapViewOfFile( QTSln1::hOpenFileMap, FILE_MAP_ALL_ACCESS, 0, 0, QTSln1::CONTROL_FRAME * QTSln1::sendMax);
    if ( QTSln1::hOpenMapView != NULL)
    {
        for (int i = 0; i < QTSln1::sendMax; i++)
        {
          pSendCtlFrm = (ControlStruct*) ((LPBYTE) QTSln1::hOpenMapView + i * QTSln1::CONTROL_FRAME);
          pSendCtlFrm->pid = i;
        }
        for (int i = 0; i < QTSln1::sendMax; i++)
        {
          pSendCtlFrm = (ControlStruct*) ((LPBYTE) QTSln1::hOpenMapView + i * QTSln1::CONTROL_FRAME);
          QString cmd = "id:" + QString::number(pSendCtlFrm->id);
          QString id = QString::number(pSendCtlFrm->pid);
          QListWidgetItem *item = new QListWidgetItem(cmd, ui.listWidget);
          item->setData(Qt::UserRole, id);
          ui.listWidget->setCurrentItem(item);
        }
    }
    else
    {
        QString str;
        str = QString::fromLocal8Bit("内存未打开!");
        QMessageBox::information( this, tr("Info!"), str, QMessageBox::Ok );
    }
  }
  else
  {
    QString str;
    str = QString::fromLocal8Bit("内存未创建!");
    QMessageBox::information( this, tr("Info!"), str, QMessageBox::Ok );
  }
}
[ 此贴被XChinux在2006-07-11 19:28重新编辑 ]
离线redegao

只看该作者 1楼 发表于: 2006-07-11
void QTSln1::on_pbtnSend_2_clicked()
是按钮1的事件处理方法
void QTSln1::on_pbtnSend_3_clicked()
是按钮2的事件处理方法
快速回复
限100 字节
 
上一个 下一个