tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^4: 異なる構造体の関数渡し
投稿日: 2010/03/16(Tue) 18:46
投稿者クン
> ByRef iSmp As Variant を、
> ByRef iSmp As ENE_SHM_REF_POWER に
> 変更したメソッドを用意するだけでは都合が悪いのでしょうか?

3種類の構造体を止め、ご指摘の通り、個々の関数に分割しました。

[呼出側]
    Dim wShm As ENE_SHM_REF_POWER
    wRet = Ene_WriteShmRefPower(wShm, Len(wShm), Me)

[関数側]
Private Function Ene_WriteShmRefPower(iSmp As ENE_SHM_REF_POWER, _
                                      iSms As Long, iFrm As Form) As Integer

    Dim wAtr As SECURITY_ATTRIBUTES
    Dim wRet As Integer
    Dim wHmx As Long
    Dim wHmp As Long
    Dim wShm As Long

    'ミューテックスの生成
    wHmx = CreateMutex(wAtr, 0, ENE_SHM_MTX_REFPOWER)
    If wHmx <> 0 Then
        '排他待ち
        If WaitForSingleObject(wHmx, -1) = WAIT_OBJECT_0 Then
            'マッピングファイルのオープン
            wHmp = OpenFileMapping(FILE_MAP_WRITE, 0, ENE_SHM_MAP_REFPOWER)
            If wHmp <> 0 Then
                'マップファイルのマッピング
                wShm = MapViewOfFile(wHmp, FILE_MAP_WRITE, 0, 0, 0)
                If wShm <> 0 Then
                    '共有メモリの書き込み
                    Call MoveMemory(wShm, iSmp, iSms)
                    wRet = ENE_RET_SUCCESS
                Else
                    Beep
                    MsgBox "マッピングファイルのマッピングに失敗しました。" _
                            & vbCrLf & "[" & ENE_SHM_MAP_REFPOWER & "]", _
                            vbCritical + vbOKOnly, iFrm.Caption
                    wRet = ENE_RET_MAP_PING_ERR
                End If
            Else
                Beep
                MsgBox "マッピングファイルのオープンに失敗しました。" _
                        & vbCrLf & "[" & ENE_SHM_MAP_REFPOWER & "]", _
                        vbCritical + vbOKOnly, iFrm.Caption
                wRet = ENE_RET_MAP_OPEN_ERR
            End If
        End If
    Else
        Beep
        MsgBox "ミューテックスの生成に失敗しました。" _
                & vbCrLf & "[" & ENE_SHM_MTX_REFPOWER & "]", _
                vbCritical + vbOKOnly, iFrm.Caption
        wRet = ENE_RET_MTX_CREATE_ERR
    End If
    'リソースの返却
    If wShm <> 0 Then
        Call UnmapViewOfFile(wShm)
    End If
    If wHmp <> 0 Then
        Call CloseHandle(wHmp)
    End If
    If wHmx <> 0 Then
        Call ReleaseMutex(wHmx)
        Call CloseHandle(wHmx)
    End If
    Ene_WriteShmRefPower = wRet
End Function

然しながら、MoveMemory()で落ちてしまいます。
もう完璧に嵌ってしまいました、ご教授の程、宜しくお願い致します。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。