終了時アプリケーションエラーが出ます。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
記事: 5
登録日時: 2005年12月25日(日) 01:51
連絡する:

終了時アプリケーションエラーが出ます。

#1 投稿記事 by »

終了時アプリケーションエラーが出ます。
「メモリーがread・・・」理由がわかりません。
デバック方法を教えてください。
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

Re: 終了時アプリケーションエラーが出ます。

#2 投稿記事 by hira »

アクセス違反か何かを起こしているのだと思いますが、ソースコードがないので何ともいえません。
問題のコードを提示していただければ、解決方法がわかるかもしれません。
高信期

#3 投稿記事 by 高信期 »

ABのバージョンが4になって以降私も同じ症状に悩まされています。
以前バグ報告板に投稿したのですが無しのつぶてだったので、
このような症状になるのは私の環境だけだと思いあきらめていました。

いろいろ調べてみましたが、
デバッグ実行時RegistWindowEx関数で登録、生成したウィンドウクラスにWM_DESTROYが投げられてきたときに
PostQuitMessage関数を呼び出す、またはそれ以外の処理の有無にかかわらず
ウィンドウ関数を抜けるとアクセス違反が起きるようです。

これらの症状はデバック実行で起き、
リリースコンパイルでは正常に終了します。
アクセス違反が必ず起きるコードを下に載せましたので、
バグの修正のほどをよろしくお願いします。

開発環境
Windows XP Home Edition Version2002 Service Pack 2
Internet Explorer 6.0 SP2
AB Version 4以降

コード: 全て選択

Dim hMainWnd As HWND
Dim hChildWnd As HWND

Function WndProc(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
  Select Case message
    Case WM_CREATE
      Dim pCS As *CREATESTRUCT

      pCS = lParam As *CREATESTRUCT
      hChildWnd = CreateWindowEx(0,
                                "CHILD",
                                "CHILD",
                                WS_OVERLAPPEDWINDOW or WS_VISIBLE,
                                CW_USEDEFAULT,
                                CW_USEDEFAULT,
                                320,
                                240,
                                hWnd,
                                0,
                                pCS->hInstance,
                                NULL)

    Case WM_DESTROY
      PostQuitMessage(0)      'ここでアクセス違反
      MsgBox 0, "WM_DESTROY"
      WndProc = 0
    Case Else
      WndProc = DefWindowProc(hWnd, message, wParam, lParam)
  End Select
End Function

Function ChildProc(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
  '子ウィンドウでもアクセス違反
  ChildProc = DefWindowProc(hWnd, message, wParam, lParam)
End Function

Dim wc As WNDCLASSEX
FillMemory(VarPtr(wc), Len(wc), 0)
With wc
  .cbSize        = SizeOf(WNDCLASSEX)
  .hInstance     = GetModuleHandle(0)
  .style         = CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
  .hCursor       = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW))
  .hIcon         = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION))
  .hIconSm       = LoadIcon(NULL, MAKEINTRESOURCE(IDI_WINLOGO))
  .lpszClassName = "PARENT"
  .lpfnWndProc   = AddressOf(WndProc)
  .hbrBackground = (COLOR_3DFACE+1)
End With
RegisterClassEx(wc)

wc.lpszClassName = "CHILD"
wc.lpfnWndProc   = AddressOf(ChildProc)
RegisterClassEx(wc)

RegisterClassEx(wc)
hMainWnd = CreateWindowEx(0,
                          "PARENT",
                          "PARENT",
                          WS_OVERLAPPEDWINDOW or WS_VISIBLE,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          640,
                          480,
                          0,
                          0,
                          GetModuleHandle(0),
                          0)

Dim msgMain As MSG, iResult As Long
Do
  iResult=GetMessage(msgMain, 0, 0, 0)
  If iResult = 0 or iResult = -1 Then
    MsgBox 0, "test" 'ここには来ない
    Exit Do
  End if
  TranslateMessage(msgMain)
  DispatchMessage(msgMain)
Loop
End
高信期

追伸

#4 投稿記事 by 高信期 »

私の環境ではいくつかの不要と思われるサービスを無効にし、また新たにサービスを追加しています。
自動、手動で起動するサービスをすべて挙げました。
症状とは関係ないかもしれませんが、ご参考になれば幸いです。

スタートアップの種類・自動
AVG7 Alert Manager Server
AVG7 Update Service
Cryptographic Services
DCOM Server Process Launcher
DHCP Client
DNS Client
Event Log
Outpost Firewall Service
Plug and Play
Print Spooler
Protected Storage
Remote Procedure Call(RPC)
Shell Hardware Detection
System Event Notification
System Restore Service
Themes
Windows Audio
Windows Management Instrumentation
Windows Time
Windows User Mode Driver Framework

スタートアップの種類・手動
Application Management
IPSEC Services
Logical Disk Manager
Logical Disk Manager Administrative Service
Network Connections
Remote Access Connection Manager
Volume Shadow Copy
WebClient
Windows Installer
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#5 投稿記事 by マティ »

私の環境では、ちゃんと動作します。
CPU athron 1GHz
Memory 512MB
OS Windows 2000 SP4

※1.念のため動作環境もお教え下さい。
※2.メッセージをフックするような常駐プログラム等を使用していませんか?
高信期

#6 投稿記事 by 高信期 »

マティさんの
>※2.メッセージをフックするような常駐プログラム等を使用していませんか?
で、代替シェル(LiteStep)を使っていることを思い出しました。
Ver3系のときはいたって正常に動いていましたし、
そもそも、あまりにもこの環境に慣れすぎていたので存在自体を忘れていました。
Explorerシェルなユーザーでログインしデバッグ実行してみると、なんのエラーも無く終了できました。
いやー、馬鹿すぎだ。

他のメッセージフックしていそうなアンチウィルスソフトやファイヤーウォールはExplorerシェルのユーザーでも起動しているので、
結論としてはLiteStepのような代替シェルが原因のようです。

森さんも代替シェルの環境でプログラミングしていませんか?
森ーその一

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

#7 投稿記事 by 森ーその一 »

原因は今一断定できませんが、
PC変えたら出なくなりました。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

代償シェル+エラーって言えば

#8 投稿記事 by konisi »

関係ないと思いますが、僕も昔bbLeanっていう代償シェル突っ込んでいた時にたまにエラー起きてました。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
返信する