![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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ランキング
-
自分のPC内でgoogleみたいな事...
-
「このアプリケーションのサイ...
-
GetProcessWorkingSetSizeでエ...
-
Outlook でのメールの表示方法...
-
システムコールについて教えて...
-
アプリケーションでハンドルで...
-
PCのアカウント名変更の影響に...
-
GV-MVP-HX2
-
64bitマシンで34bitのソフト動...
-
アプリケーションエラー
-
vmwareのゲストOSへFTP接続でき...
-
Red Hat 7.1 に rshできない(~...
-
VirtualBoxでUSBメモリにアクセ...
-
HandBrakeでCPUのコア数を指定
-
CrystalDiskInfoの書き込み量
-
SMTP 仮想サーバー
-
ウイルスソフトのせいで画像が...
-
VMwarePlayer上のWindows98SEと...
-
PDFファイルを閉じるのに30秒以...
-
OfficeでOEM版が否かを判別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
写真保存アプリは運営側からは...
-
携帯のAPPとは何ですか
-
Corei 7-12700(Alder Lake) と ...
-
マイクロソフトoffice 毎月(毎...
-
アクティブでないアプリケーシ...
-
【Chapter2】OSとアプリケーシ...
-
アカウント名とユーザー名との...
-
Java 8 Updateを消去していいのか
-
PCのアカウント名変更の影響に...
-
パソコンを起動するたびにエラ...
-
jwwでjwcファイルが開かない!
-
windows11でファイアーウォール...
-
Outlook でのメールの表示方法...
-
basp21をWindowsServer2008R2で...
-
Windows7でのアカウントの移行...
-
Vista導入前のアプリケーション...
-
16ビット と 32 ビット
-
予期せず終了が非常に多い
-
cvsとは
-
アプリケーションでハンドルで...
おすすめ情報