ページ 1 / 1
デバッグ実行が例外処理で止まる
Posted: 2006年5月27日(土) 16:33
by Homura
コード: 全て選択
#console
Type WSAData
wVersion As Integer
wHighVersion As Integer
szDescription(256) As Byte
szSystemStatus(128) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo As Long
End Type
Type HOSTENT
h_name As BytePtr
h_aliases As DWordPtr
h_addrtype As Integer
h_length As Integer
h_addr_list As DWordPtr
End Type
Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequested As Long,ByRef lpWSAData As WSAData) As Long
Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Declare Function gethostbyname Lib "ws2_32.dll" (ByVal name As BytePtr) As *HOSTENT
DIM tWsadata As WSAData
DIM tHostent As *HOSTENT
DIM tText[16] As Byte
WSAStartup(2,tWsadata)
tHostent=gethostbyname("www.activebasic.com")
wsprintf(tText,"%d.%d.%d.%d"_
,GetByte(tHostent->h_addr_list[0]) _
,GetByte(tHostent->h_addr_list[0]+1) _
,GetByte(tHostent->h_addr_list[0]+2) _
,GetByte(tHostent->h_addr_list[0]+3) )
MessageBox(NULL,tText,"IPアドレス",0)
WSACleanup()
END
上記のようなコードのリリースコンパイルと実行には成功するのですが、
デバッグ実行ではgethostbynameの位置で「例外処理 code 6BA」のダイアログが出て止まってしまいます。
gethostbynameだけではなくてlisten等のAPIでも同じなんですが、どこを直せばうまくデバッグ実行できるのでしょうか?
返信@yu0627
Posted: 2006年5月27日(土) 17:34
by yu0627
僕の環境では例外処理が起こりませんでした。(AB4.24.00/WinXPSP2)
多分、Windowsのサービス「Server」「WorkStation」が起動されていないために起こるのだと思います。
起動の仕方
※必ず管理者権限のアカウントで
・スタート→コントロールパネル→パフォーマンスとメンテナンス→管理ツールのサービスを実行
・リストの中にある「Server」「Workstation」のサービスを起動。
解決しました
Posted: 2006年5月27日(土) 18:39
by Homura
お返事ありがとうございます。
ServerやWorkStationを起動しても変わりませんでしたが、
DNS Clientを起動したら前述のコードではうまく行きました。
何か釈然としないものがありますが・・・、ABの仕様なのかな?
返信@yu0627
Posted: 2006年5月27日(土) 18:52
by yu0627
これについては、前々から話題になっています。
しかし、正確な原因がまだ突き止められていません。
ひとつ候補としてあるのが、前述のサービスの関係です。
それにより例外処理が出る、というものです。
Posted: 2006年5月27日(土) 21:34
by イグトランス
DNS Clientサービスを実行しなければ動かないというのは納得のいく動作だと思います。
"www.activebasic.com"のようなドメイン名からIPアドレスを得ることこそがDNSの役割ですから,
そのサービスがなければ動かなくて当然と考えるべきではないでしょうか。
敢えて言うとすればABというよりもWinSockの仕様でしょう。
Posted: 2006年5月27日(土) 21:49
by 泉
横から失礼します。
私の場合は、サービス「DNS Client」「WorkStation」
は自動で開始されていて「Server」はリストにありませんでした。
この状態でGetOpenFileNameを実行すると例外処理で落ちます。
どうすればいいのでしょうか?
Posted: 2006年5月27日(土) 22:06
by イグトランス
GetOpenFileName関数が失敗する場合にはComputerBrowserサービスも関係あるようです。
これが起動されているかどうかも確かめてみてください。
http://www.activebasic.com/forum/viewtopic.php?p=2062
DNS Client
Posted: 2006年5月28日(日) 00:04
by Homura
> DNS Clientサービスを実行しなければ動かないというのは納得のいく動作だと思います。
> "www.activebasic.com"のようなドメイン名からIPアドレスを得ることこそがDNSの役割ですから,
> そのサービスがなければ動かなくて当然と考えるべきではないでしょうか。
> 敢えて言うとすればABというよりもWinSockの仕様でしょう。
前述の通り、そもそもリリースコンパイルではまったく問題はない訳で…。
我が家ではルーターで名前解決をしているので、DNS Clientを止めても大丈夫なんですけど、(というよりリソースの無駄)
デバッグのためだけに動かすというのはなんか違うなぁ、と。
Re: DNS Client
Posted: 2006年5月28日(日) 10:35
by イグトランス
> 我が家ではルーターで名前解決をしているので,
そのようにどこかへ名前解決を依頼するのが(サービス名のそれではなく概念上の)DNSクライアントです。
逆にほかから名前解決を依頼されるほうがDNSサーバです。
今調べてみたのですが,WindowsのDNS ClientサービスはDNSで解決した名前のキャッシュを行うサービスで,
実際には名前解決を担っているわけではないようです。