アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えてください。
VBで現在実行しているプロシージャ名を取得指定のですがkのようなことは可能ですか?
可能ならばどのようにすればいいか教えてください。

現在実行ファイルにて起動しているのですが、どこかで「実行エラー」が発生しています。
この実行エラーの場所の特定のために、現在起動中のプロシージャ名をログに保存しようかと考えています。
また、その他このようなエラー箇所特定方法などがありましたら教えてください。
環境:VB6.0  Win2000

A 回答 (6件)

残念ながら出来ません。



私のプロジェクトでは全てのプロシージャに On Error コーディングをして、そこでログにどのプロシージャかを書いてました。

そういう方法しかないと思います。
    • good
    • 2

#1です。



なるほど。
だとすると、やはり、#4さんがご指摘のように、On Errorでエラーを回避して、それぞれにプロシージャ名を手動で書き込んでいくしかないと思います。

月1で発生するエラーなら、頻度は高いといえますし、だからといって、実行ログは取っていられないでしょうから、エラーログで対応するしかないですね。
でも、そのエラーが発生するタイミングに、共通点はないか、とか、エラー発生時の実行環境の状況、エラーメッセージ(メッセージが出ないとお手上げですが)などから、大体の絞込みは出来ないものでしょうか?
いえ、難しいなら、エラーログを取るしかありませんが。
    • good
    • 0

さらにさらに失礼しました。



>CodeModule
実行したら、「関数名」は取れないようです。
実行していない状況に限るようです。

関数名ではなく、モジュール名なら取れそうです。


以前に「GetModuleFileNameEx」をどこかで拾いました。
実行できないのですが、そのまま張っておきます。



http://support.microsoft.com/default.aspx?scid=k …


Option Explicit

Private Declare Function WindowFromPoint Lib "user32" _
 (ByVal xPoint As Long, _
  ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" _
 (lpPoint As POINTAPI) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" _
 (ByVal hwnd As Long, _
  lpdwProcessId As Long) As Long
Private Declare Function GetParent Lib "user32" _
 (ByVal hwnd As Long) As Long
Private Declare Function EnumProcessModules Lib "psapi" _
 (ByVal hProcess As Long, _
  ByRef hMod As Long, _
  ByVal sizehMod As Long, _
  ByRef dwlpdwPIDsize As Long) As Long
Private Declare Function GetModuleFileNameEx Lib "psapi" _
 Alias "GetModuleFileNameExA" _
 (ByVal hProcess As Long, _
  ByVal hMod As Long, _
  ByVal szFileName As String, _
  ByVal nSize As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" _
 (ByVal dwDesiredAccess As Long, _
  ByVal bInheritHandle As Long, _
  ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
 (ByVal hObject As Long) As Long

Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const PROCESS_VM_READ = &H10
Private Const MAX_PATH = 260

Private Type POINTAPI
 x As Long
 y As Long
End Type

Private Sub Form_Load()
 Timer1.Interval = 1000
 Timer1.Enabled = True
End Sub


Private Sub Timer1_Timer()
 Dim lngApiRet As Long
 Dim lnghProcess As Long
 Dim lnghModule(512) As Long
 Dim strModuleName As String
 Dim lngcbNeeded As Long
 Dim lngStrLen As Long
 Dim i As Integer
 Dim lngProcessID As Long
 Dim pp As POINTAPI
 Dim lngParent As Long
 
 List1.Clear
 lngApiRet = GetCursorPos(pp)
 lngParent = getTopParent(WindowFromPoint(pp.x, pp.y))
 lngApiRet = GetWindowThreadProcessId(lngParent, lngProcessID)
 lnghProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or _
              PROCESS_VM_READ, _
              0&, lngProcessID)
  If lnghProcess Then
   If EnumProcessModules(lnghProcess, lnghModule(0), _
              UBound(lnghModule), lngcbNeeded) Then
    For i = 0 To lngcbNeeded / 4 - 1
     strModuleName = String(MAX_PATH, Chr(0))
     lngStrLen = GetModuleFileNameEx(lnghProcess, _
                     lnghModule(i), _
                     strModuleName, _
                     Len(strModuleName))
     strModuleName = Left(strModuleName, lngStrLen)
     List1.AddItem Format(lngProcessID, "00#") & _
            vbTab & strModuleName
    Next i
   End If
  End If
  lngApiRet = CloseHandle(lnghProcess)
End Sub

Private Function getTopParent(ByVal lnghWnd As Long) As Long
 getTopParent = IIf(CBool(GetParent(lnghWnd)), getTopParent(lnghWnd), lnghWnd)
End Function

参考URL:http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0

すいません。


VBEはEXCEL用の場合に限るようです。


VBは
CodeModuleオブジェクトがキーとなるようです。

参考URLのコメント付加アドインのサンプルがヒントとなると思います。

ただし、やはり開発環境に限りで、コンパイルしたらだめっぽいです。

参考URL:http://www.galliver.co.jp/writing/nikkei_tokushu …
    • good
    • 0

とおーい記憶で話しております。



VB6ならデバッグ限定で、確か取れたと思いますよ。

ただしコンパイルしたら取れなかったと思います。

キーワードは「VBE」だったと思います。

「思います」ばかりですいません。
    • good
    • 0

質問の回答としては、「そんなことはできません」だと思います。



ところで、質問を拝見するところ、実行エラーとのことですが、まず、実行ファイル(ってことはexeですか?)にする前に、デバッグできませんか?
デバッグでは起こらない現象ですか?
また、エラーログのとり方を、どのようにお考えですか?
補足をお願いします。

この回答への補足

実行ファイルとはEXEのことです。
エラーというのが、1ヶ月に1回出るかでないようなものです。デバック環境では現状出ていません。
実行マシン(PC)にはVB6の開発環境をインストールしていません。
エラーログは現在下記のように考えています。
あるプロシージャに入ると、そのプロシージャ名をtxt形式でファイルに保存しようと考えています。
以上、説明不足ですみません。

補足日時:2005/02/15 11:17
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A