
VB6で画像処理アプリケーションの開発を行っている者です。
下記記述でワーキングセット領域を変更しようとしていますが、GetProcessWorkingSetSizeの部分でエラーが発生します。
使用PCにより、「問題が発生したため、Visual Basic を終了します。 ご不便をおかけして申し訳ありません。」や有無を言わさず開発環境が終了してしまう場合がありますが、いずれにしても原因が分かりません。
どなたかアドバイスいただけませんでしょうか?
よろしくお願い致します。
(標準モジュールで宣言)
Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long
Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Declare Function GetProcessWorkingSetSize Lib "kernel32" (ByVal qq As Integer, ByVal pp As Integer, ByVal rr As Integer) As Long
Declare Function SetProcessWorkingSetSize Lib "kernel32" (ByVal phph1 As Long, ByVal wkminwkmin1 As Long, ByVal wkmaxwkmax1 As Long) As Long
Declare Function GetLastError Lib "kernel32.dll" () As Long
(実行部)
Sub WorkingSetChange()
Dim id As Long 'アプリケーションプログラムのID用変数
Dim ph As Long 'アプリケーションプログラムのハンドル用変数
Dim wkmin As Long '最小ワーキングセット用変数
Dim wkmax As Long '最大ワーキングセット用変数
Dim bret As Long
Const PROCESS_SET_QUOTA = &H100
Const PROCESS_QUERY_INFORMATION = &H400
'アプリケーションプログラムのIDを取得する
id = GetCurrentProcessId()
'アプリケーションプログラムのハンドルをオープンする
ph = OpenProcess(PROCESS_SET_QUOTA + PROCESS_QUERY_INFORMATION, False, id)
'アプリケーションプログラムの最大ワーキングセット値と最小ワーキングセット値を取得
bret = GetProcessWorkingSetSize(ph, wkmin, wkmax)
'最小ワーキングセット値を1MBに設定
wkmin = 1 * 1024 * 1024
'最大ワーキングセット値を3MBに設定
wkmax = 3 * 1024 * 1024
'アプリケーションプログラムの最大ワーキングセット値と最小ワーキングセット値を変更
bret = SetProcessWorkingSetSize(ph, wkmin, wkmax)
'アプリケーションプログラムのハンドルをクローズする
bret = CloseHandle(ph)
End Sub
No.1ベストアンサー
- 回答日時:
>使用PCにより、「問題が発生したため、Visual Basic を終了します。
ご不便をおかけして申し訳ありません。」や有無を言わさず開発環境が終了してしまう場合がありますが、いずれにしても原因が分かりません。環境による…のですから、まずはその環境の差異を確認されては?
http://msdn.microsoft.com/ja-jp/library/cc429141 …
によると、Win9x系では動作しない可能性がありそうですが…。
# kernel32.dllにGetProcessWorkingSetSize()がエクスポートされていない。
# エクスポートされているが中身は何もしない(例外を発生させるだけ)な子動作になっている。とか…。
VBではよくわかりませんが、変数のアドレスが正しく渡せていない…とか。
http://www.google.co.jp/search?hl=ja&num=30&q=VB …
# 適当に検索。
# Declare Function GetProcessWorkingSetSize Lib "kernel32" (ByVal qq As Integer, 【ByVal】 pp As Integer, 【ByVal】 rr As Integer) As Long
# ではアドレス渡せていないような気がするのは気のせいでしょうか?
ご回答ありがとうございます。
ご指摘の通り、【ByVal】を【Byref】に変更すると、ご質問したような問題が発生しなくなりました。ただ、型が違いますとのエラーが発生したため、As Integerを Longに変更したところ、動作致しました。
朝から半日悩んでおりましたので大変助かりました。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
問題が発生したため、このプロ...
-
Outlook でのメールの表示方法...
-
Corei 7-12700(Alder Lake) と ...
-
Excel.Applicationへのシートコ...
-
オーバーレイをきりたいんですが
-
パソコンを起動するたびにエラ...
-
「このアプリケーションのサイ...
-
アカウント名とユーザー名との...
-
explorer.exeのエラーについて
-
virtual boxで画面の自動キャプ...
-
Excelを開こうとすると常に「st...
-
CrystalDiskInfoの書き込み量
-
VMWareでのクローズネットワーク
-
red hatの再インストール方法
-
ゲストOSのpingが通らない
-
VMwareでのゲストOSのサウンド...
-
リモートデスクトップでのリフ...
-
HandBrakeでCPUのコア数を指定
-
Light Wave ツールバーが消えま...
-
PDFファイルを閉じるのに30秒以...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Corei 7-12700(Alder Lake) と ...
-
写真保存アプリは運営側からは...
-
Outlook でのメールの表示方法...
-
問題が発生したため、このプロ...
-
PCのアカウント名変更の影響に...
-
エラー名:AppHangB1 iexplore....
-
WINDOWS vs LINUX
-
オラクルってなんの会社なんで...
-
エクセルの動作が停止する事が...
-
Netscapeの設定について
-
英語版windowsOSを利用している...
-
16ビット と 32 ビット
-
【Mac】ウィンドウを閉じた時の...
-
インターネット アプリケーショ...
-
一太郎などの使用者欄の名前を...
-
PING.EXE - アプリケーション...
-
jwwでjwcファイルが開かない!
-
パソコンのエラーについて
-
windows 7で、特定のアプリケー...
-
Microsoft .NET Frameworkを削...
おすすめ情報