C++におけるJVGetsのメモリ解放方法

タイトル C++におけるJVGetsのメモリ解放方法
記事No 7538
投稿日 : 2025/04/16(Wed) 07:57
投稿者 imetk

お世話になっております。

「JRA-VAN Data Lab.開発ガイド(イベントC++)」 を参考に C++で開発をしてい
ます。

JVOpenで取得したデータを読み込む方法としてJVReadとJVGetsがありますが、J
VReadを使用した方法では問題なく動作できています。

パフォーマンス向上のため、JVGetsを使用した方法に切り替えたいのですが、
インターフェース仕様書によるとアプリ側でメモリ解放が必要とのこと。実際に
実行してみるとメモリリークが発生し、メモリ使用量が1,500MB程度になったと
ころで例外が発生してしまいます。

JVGetsでデータを取得する毎に、buffのメモリを開放したいのですが、全く方
法がわからず困っております。
こちらにソースコードを貼ろうと思いましたが、投稿制限事由に引っかかって
しまい、貼れませんでした。

サンプルプログラム 「sample1_VC2019」 を確認しましたが、こちらは作成日
が2003年のようで、現在と書き方がだいぶ変わっており参考になりませんでした

どなたかお知恵をお貸しいただけないでしょうか。|

タイトル Re: C++におけるJVGetsのメモリ解放方法
記事No 7540
投稿日 : 2025/04/18(Fri) 06:14
投稿者 サメの餌

imetkさん、おはようございます。

ちょっとC++の話ではないので参考になるのかも分かりません。
自分自身もC++は使ってないし、C#とC++が別物だとは思ってます。

JVGetsでデータを取得する毎に、buffのメモリを開放したいのですが、

実はこちらの掲示板の過去ログP0006の2ページ目辺りのNo.6853にたかひろさん
が「C#でのメモリ解放」ってスレがあるんですが、そこを読まれるとヒントにな
るかもです。自分はC#なのでこのスレのおかげで無事に現在に至ってます。|

タイトル Re: C++におけるJVGetsのメモリ解放方法
記事No 7545
投稿日 : 2025/04/23(Wed) 09:49
投稿者 JRA-VANソフトサポート

JRA-VANソフトサポート 鷹森です。
DataLab.サービスをご利用頂きまして誠にありがとうございます。

ご認識頂いている通り、JVGetsを使用する際にはアプリケーション側でメモリ
解放が必要です。
サンプルプログラムでメモリ解放を実施している箇所は以下です。
・sample1_VC2019\sample1Dlg2.cpp 305~307行目
VariantClear(&varBuff);
VariantClear(data);
SafeArrayDestroy(psa);

上記関数を参考にimetk様のソースコードで同様にメモリ解放していただくよう
お願いいたします。

以上、よろしくお願いいたします。|