• ベストアンサー

Visual Basicのエラーについて

「Visual Basicでエンジョイプログラミング」(CQ出版社) いう本に掲載されている「シリアルポートの機能調査」 というプログラムを書いたのですが実行したら 下に書いてあるプログラムのdummy = GetCommProperties(hComm, prop) の部分の「prop」の文字色が変わって 「コンパイルエラー ByRef 引数の型が一致しません。」 と表示されたのですがどこをどう直せばいいかよくわかりません。 何かわかる方がいましたら教えてください。 よろしくお願いします。 'フォームモジュール Form1 Private Sub Form_Load() Command1.Caption = "制御信号線の調査" End Sub Private Sub Command1_Click() 'シリアルポートをオープンする Const GENERIC_READ = &H80000000 Const GENERIC_WRITE = &H40000000 Const OPEN_EXISTING = 3 dummy = CloseHandle(43) comname = "COM1" hComm = CreateFile(comname, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0) If hComm = -1 Then MsgBox comname & "が使えません", 16 End End If Print "ハンドル番号"; hComm dummy = GetCommProperties(hComm, prop) flg = prop.dwProvCapabilities Const PCF_DTRDSR = &H1& Const PCF_RTSCTS = &H2& If flg And PCF_DTRDSR Then Print "DTR/DSRが使用できます" If flg And PCF_RTSCTS Then Print "RTS/CTSが使用できます" dummy = CloseHandle(hComm) End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

直さないといけない部分、肝心要の部分が質問文にないので、回答できません。 因みに「コンパイルエラー ByRef 引数の型が一致しません。」のエラーは、例えば Declare Function GetCommProperties Lib "kernel32" Alias "GetCommProperties" (ByVal hFile As Long, lpCommProp As COMMPROP) As Long と定義されているのに Dim prop As COMMTIMEOUTS 'この行が間違い。ここを直す必要あり と、違う構造体を宣言して、その違う構造体を dummy = GetCommProperties(hComm, prop) と言う感じで引数に渡そうとした時に起きます。 で、質問文には Dim prop As COMMPROP のように、prop構造体の実体を宣言している部分が書かれてないので、冒頭の「直さないといけない部分、肝心要の部分が質問文にないので、回答できません。」と言う話になる訳です。 もう、どこをどう直せば良いか、判りますよね?

hiro-333
質問者

お礼

ご回答ありがとうございます。 問題は解決しました!

その他の回答 (2)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

No.2の追加補足。 なお、 Dim prop As ホゲホゲ の行が無い、つまり、変数propを定義し忘れると(どこにも定義してないと) dummy = GetCommProperties(hComm, prop) ってやった瞬間に「ん?propって知らない変数だな。じゃ、取り敢えず暗黙的宣言変数としてInteger型にしちゃえ」と勝手に定義され、その後で「あら?引数の型が違うじゃんかよ」ってエラーが出ます。 変数propがちゃんと定義されてるかも確かめて下さいね。

hiro-333
質問者

お礼

ご回答ありがとうございます。 問題は解決しました!

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

掲載していただいたソースにはエラーとなっているprop変数が定義されていません。オブジェクト変数のようですので必ずどこかで定義/宣言しているはずです。 もう一度、本のソースを良く調べてください。

hiro-333
質問者

お礼

ご回答ありがとうございます。 問題は解決しました!

関連するQ&A

専門家に質問してみよう