dポイントプレゼントキャンペーン実施中!

お世話になります。
VB6.0→VB2010の移行をしております。
中にメールスロットを使用して通信を行っている部分があり、
その処理の移行で詰まっております。

作成したモジュール:
---------------------
Private Declare Function CreateMailslot Lib "kernel32" Alias "CreateMailslotA" ( _
ByVal lpName as String, _
ByVal nMaxMessageSize As Long, _
ByVal lReadTimeout As Long, _
ByVal lpSecurityAttributes As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const MAILSLOT_WAIT_FOREVER = (-1)
Private Const WIN_POP_SLOT = "\\.\mailslot\MS6001"

Private P_hMailslot As Long

'メールスロットOPEN
Public Function SlotOpen() As Long
SlotOpen = -1

'前回のクローズチェック
If P_hMailslot <> 0 Then
Call CloseHandle(P_hMailslot)
P_hMailslot = 0
End If

'★ここでエラーになります。
P_hMailslot = CreateMailslot(WIN_POP_SLOT,0,MAILSLOT_WAIT_FOREVER,0)

'......続く
End Function
---------------------
「デバッグ開始」よりコードを実行しており、SlotOpen()関数を呼ぶと、
★部で「AccessViolationExceptionはハンドルされませんでした。保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」と
エラーが出ます。

どこかが根本的に違うのだと思うのですが、どなたか切り分けのヒントを頂けませんか。
よろしくお願いいたします。

A 回答 (1件)

VB6とVB2010では型の大きさが異なります。



・API上でINT/LONG/DWORDなどはInteger型
・API上でハンドルやポインタなどはIntPtr型
にする必要があります。

この回答への補足

ありがとうございます!!無事OPENでき、
その先の情報取得もできているようです。
あとは情報が来た際にReadFileがうまくいくかどうか・・・。
引数にByte型配列があるのです・・・ドキドキ。

アドバイス頂きましてありがとうございました!

補足日時:2012/08/03 11:17
    • good
    • 0
この回答へのお礼

Yune-Kichiさま
アドバイス有難うございます。
なるほど。さっそくやってみます!!

お礼日時:2012/08/03 09:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!