FileMapping無法在兩個應用程式傳遞! |
答題得分者是:taishyang
|
l90425
初階會員 ![]() ![]() 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
請問下面程式有什麼錯嗎?
發送程式A按下WriteButtonClick時,我再接收程式B的BitBtn1Click,卻發生無法讀取! 可是要是接收和發送在同一個程式下就沒有問題! 請問各位大大這是為什麼呢? 懇請提示或解答! 謝謝!! 發送程式A [code cpp] #include #pragma hdrstop #include "Unit1.h" #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::CreateButtonClick(TObject *Sender) { hFileMapping = NULL; hFileMapping = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "SakurabaAoi"); if (hFileMapping != NULL) { if (::GetLastError() == ERROR_ALREADY_EXISTS) { MessageDlg("Mapping file already created!", mtError, TMsgDlgButtons() << mbOK, 0); CreateButton->Enabled = false; ::CloseHandle(hFileMapping); } else { char *P = static_cast if (P != NULL) { std::memset(P, 0x00, 4096); ::UnmapViewOfFile(P); CreateButton->Enabled = false; CloseButton->Enabled = true; } } } else { MessageDlg("失敗", mtError, TMsgDlgButtons() << mbOK, 0); } } //--------------------------------------------------------------------------- void __fastcall TForm1::CloseButtonClick(TObject *Sender) { if (::CloseHandle(hFileMapping)) { CreateButton->Enabled = true; CloseButton->Enabled = false; } } //--------------------------------------------------------------------------- void __fastcall TForm1::WriteButtonClick(TObject *Sender) { HANDLE hFileMap = ::OpenFileMapping(FILE_MAP_WRITE, FALSE, "SakurabaAoi"); if (hFileMap != NULL) { char* P = static_cast /*P[0] = 100; P[1] = 200; P[2] = 300; P[3] = 400; /*/ std::strcpy(P, Edit1->Text.c_str()); ::UnmapViewOfFile(P); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { if (CloseButton->Enabled) { ::CloseHandle(hFileMapping); } } //--------------------------------------------------------------------------- [/code] 接收程式B [code cpp] #include #pragma hdrstop #include #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn1Click(TObject *Sender) { HANDLE hFileMap = ::OpenFileMapping(FILE_MAP_WRITE, FALSE, "SakurabaAoi"); if (hFileMap != NULL) { char *P = static_cast Memo1->Lines->Add(P); ::UnmapViewOfFile(P); } } [/code]
------
-謝謝大大熱心的回覆!謝謝! |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
試試下面的code
傳送端: TForm1 *Form1; char* mapData; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { HANDLE hFileMapping = NULL; hFileMapping = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "SakurabaAoi"); if (hFileMapping != NULL){ if (::GetLastError() == ERROR_ALREADY_EXISTS){ MessageDlg("Mapping file already created!", mtError, TMsgDlgButtons() << mbOK, 0); ::CloseHandle(hFileMapping); }else{ mapData = (char *)(::MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0)); if (mapData != NULL){ std::memset(mapData, 0x00, 4096); } } }else{ MessageDlg("失敗", mtError, TMsgDlgButtons() << mbOK, 0); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { std::strcpy(mapData, Edit1->Text.c_str()); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { ::UnmapViewOfFile(mapData); } //--------------------------------------------------------------------------- 接收端: TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { HANDLE hFileMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "SakurabaAoi"); if (hFileMap != NULL){ char *P = (char *) (::MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0)); Memo1->Lines->Add(P); ::UnmapViewOfFile(P); } } //---------------------------------------------------------------------------
編輯記錄
taishyang 重新編輯於 2010-11-01 06:15:19, 註解 無‧
|
l90425
初階會員 ![]() ![]() 發表:95 回覆:152 積分:49 註冊:2008-04-03 發送簡訊給我 |
可以了!
不過這是為什麼? 我還是不太懂,能否請大大解釋一下! 非常感謝!!謝謝! ===================引 用 taishyang 文 章=================== 試試下面的code 傳送端: TForm1 *Form1; char* mapData; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { HANDLE hFileMapping = NULL; hFileMapping = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "SakurabaAoi"); if (hFileMapping != NULL){ if (::GetLastError() == ERROR_ALREADY_EXISTS){ MessageDlg("Mapping file already created!", mtError, TMsgDlgButtons() << mbOK, 0); ::CloseHandle(hFileMapping); }else{ mapData = (char *)(::MapViewOfFile(hFileMapping, FILE_MAP_WRITE, 0, 0, 0)); if (mapData != NULL){ std::memset(mapData, 0x00, 4096); } } }else{ MessageDlg("失敗", mtError, TMsgDlgButtons() << mbOK, 0); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { std::strcpy(mapData, Edit1->Text.c_str()); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { ::UnmapViewOfFile(mapData); } //--------------------------------------------------------------------------- 接收端: TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { HANDLE hFileMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "SakurabaAoi"); if (hFileMap != NULL){ char *P = (char *) (::MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0)); Memo1->Lines->Add(P); ::UnmapViewOfFile(P); } } //---------------------------------------------------------------------------
------
-謝謝大大熱心的回覆!謝謝! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |