
OS:Windows Server 2003
開発言語:visual basic 2005
vb6で作られたアプリを.net2005に移行しています。
その中で、下記のコードの「GetModuleBaseName」が呼び出される箇所がエラーになり、移行することができません。
-----------------------------------
【コード】
If EnumProcessModules(hProcess, hModules(0), UBound(hModules), lNeeded) <> 0 Then
'モジュール数を取得する
lModules = lNeeded / 4
'モジュールベース名を取得する
lRetValue = GetModuleBaseName(hProcess, hModules(0), tModuleBaseName(0), UBound(tModuleBaseName))
~~~
~~~
end if
-----------------------------------
【エラー内容】
AcccessViolationExceptionはハンドルされませんでした。
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。
他のメモリが壊れていることが考えられます。
-----------------------------------
「GetModuleBaseName」自体は下記のとおり定義しています。
-----------------------------------
Declare Function GetModuleBaseName Lib "Psapi.dll" Alias "GetModuleBaseNameA" (ByVal hProcess As Integer, ByVal hModule As Integer, ByRef lpBaseName As String, ByRef nSize As Integer) As Integer
-----------------------------------
移行前のvb6のアプリでこの箇所がエラーなく通ることを確認しました。
Psapi.dllの使用方法がWindowsServer2003になって変更になったのでしょうか?
使用方法が変更になったのか調べたのですが、WinAPIの知識不足で・・・。
お力をお貸しください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
GetModuleBaseNameのlpBaseName引数には文字列を確保しておいてから呼び出すように思います
その確保したサイズがnSizeだろうと思います
nSizeは単なるDWORDなのでByRefではなくByValなように思いますよ
VB6でしたら
dim ss as String * 256
といった固定長文字列を使うか
dim ss as string
ss = Space(256)
といった具合で確保してから呼び出すのでしょう
VB.NETの場合は 固定長文字列の宣言はVBFixedString属性をしてしない場合は出来なくなっています
<VBFixedString(256)>dim ss as String
といった具合に宣言するのだろうと思います
固定長文字列でないなら StringBuilderクラスを使うといいのかもしれません
ありがとうございました。
ByRef→Byvalで無事に通ることができました。
元々のVB6のソースが、
ByRef As Any
だったもので、
As Any → As String
と修正しただけだったのです。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
マクロについて教えてください...
-
【Excel VBA】マクロをボタンに...
-
【マクロ】エラー【#DIV/0!】が...
-
Outlook.ApplicationをCreateOb...
-
実行時エラー48発生時のDLL特定...
-
VBAがブレークモードになっ...
-
VBAで、定数式が必要ですのエラ...
-
「定数式が必要です。」って何...
-
一般ODBCエラーについて
-
VBAでESCキーを無効にしたいの...
-
日本語環境下で作成したマクロ...
-
[Delphi] データセットは閉じて...
-
【エクセル】ハイパーリンク先...
-
実行時エラー -'-2147417848
-
なぜエラーになるのでしょうか...
-
ExcelVBA Range クラスの Page...
-
エラー1004 PDFの保存ができま...
-
VBAのエラー発生場所をメッセー...
-
VBAのコードがエラーになっ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
【マクロ】エラー【#DIV/0!】が...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
実行時エラー -'-2147417848
-
実行時エラー48発生時のDLL特定...
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー3001「引数が間違...
-
EXCEL/VBAで、自分のPCだけエラ...
-
VB6+SQL サーバー 2000 で 実行...
-
VBAのエラー発生場所をメッセー...
-
ADODB.Streamを使用してUTF-8を...
-
【Excel VBA】マクロをボタンに...
-
OLEDB.NETで接続できない
-
なぜエラーになるのでしょうか...
-
INSERT INTOステートメント構文...
-
Outlook.ApplicationをCreateOb...
おすすめ情報