軺冠
Lv 5
軺冠 發問時間: 電腦與網際網路程式設計 · 8 年前

Inter Process Communicatio程式崩潰

最近想要寫兩程式通訊IPC(Inter Process Communication)的程式

某位四個英文字的大大提供#pragma Data_Set的方式

不過程式考量之下不希望使用DLL的達到IPC,所以我選擇使用CreateFileMapping

但是以下程式碼在寫入時總是讓程式崩潰,不知道是否有大大能夠

幫助一下小弟我呢?

'========

'Use Visual Basic 6

'MyMap and MyMEM is global variable ,type is [long]

'FILE_MAP_ALL_ACCESS is constant, Value is &HF001F

'&H4 is PAGE_READWRITE

'========

'====CreateFileMapping Function

'(Form_Load)

MyMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, False, "SharedMEM")

If MyMap = 0 Then

 MyMap = CreateFileMapping(-1, 0, &H4, 0, 256, "SharedMEM")

End If

If MyMap <> 0 Then

 MyMEM = MapViewOfFile(MyMap, FILE_MAP_ALL_ACCESS, 0, 0, 0)

'到此處顯示正常執行

End If

'=======Write Memory

'(Command1_Click)

Dim Buffer As String * 128

Buffer = Text1.Text

CopyMemory MyMEM, ByVal Buffer, 128

已更新項目:

去掉ByVal依然Crash...真詭異

3 個解答

評分
  • 是我
    Lv 5
    8 年前
    最佳解答

    您要瞭解的有:

    1.ByVal、ByRef 的差異

    2.未註明者為 ByRef

    3.VB 字串的 memory layout

    在這兒不討究這些細節,您可很容易地找到相關資訊,或參考以下程式碼,就大概掌握問題所在了:

    延續您的程式寫法,請另新增一 TextBox (Text2),修改您的 Command1_Click 為:

    Dim Buffer1 As String

    Dim Buffer2 As String

    Dim n As Long

    ' Save

    Buffer1 = Text1.Text

    CopyMemory ByVal MyMEM, ByVal StrPtr(Buffer1) - 4, Len(Buffer1) * 2 + 6

    ' Load, get its length first

    CopyMemory n, ByVal MyMEM, 4

    ' Allocate correct memory space

    Buffer2 = String$(n, 0)

    CopyMemory ByVal StrPtr(Buffer2) - 4, ByVal MyMEM, n * 2 + 6

    Text2.Text = Buffer2

    程式碼幾乎說明一切,以大家的聰明才智,應不須額外說明才是(前題是您要瞭解 VB 字串 memory layout)。

    2012-03-03 13:41:09 補充:

    除 File Mapping 外,Microsoft 提及的 Interprocess Communications 方式可參考

    http://msdn.microsoft.com/en-us/library/windows/de...

    • 登入以對解答發表意見
  • 匿名使用者
    8 年前

    你想的人和我想的人一樣嗎˙˙?

    2012-03-01 20:52:55 補充:

    CopyMemory MyMEM, ByVal Buffer, 128

    API?

    第二個參數要不要試著去掉ByVal看看˙˙

    • 登入以對解答發表意見
  • 8 年前

    某位四個英文字的大大 <~~ 立即聯想到哪位= =

    2012-03-02 00:18:09 補充:

    樓上你也要「想」嗎XD

    2012-03-08 02:08:29 補充:

    程式碼幾乎說明一切 <~~ 很同意耶!.. 可是總有人想每行程式碼都下註解- -

    • 登入以對解答發表意見
還有問題?馬上發問,尋求解答。