タイトル | : Re^4: 異なる構造体の関数渡し |
記事No | : 14556 |
投稿日 | : 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()で落ちてしまいます。 もう完璧に嵌ってしまいました、ご教授の程、宜しくお願い致します。
|