-
投稿者投稿
-
-
マキゲスト
はじめまして、お世話になります。
AZ-Prolog ver9 for Windows をインストールし、
azp.libを Visual Studio 2015 (C++) で個人開発中のアプリにリンクして使用しています。以下の問題が発生しており、心あたりの範囲で原因を記載しました。
azp.libを Visual Studio 2015 で再コンパイルしていただければ解決するような気がしております。
まずはご検討ください。必要があれば何卒対応をお願いします。■事象
assertzの実行時に、メモリアクセス違反を示す0xc0000005が発生することを確認しました。
このエラーは一回の実行では発生せず、Prolog起動時に設定したヒープメモリがなくなり次第発生しているように見えます
(「■(参考)使用箇所の抜粋」で1024と設定したヒープオプション値を10倍にすると、10倍の回数分だけassertzが成功します)。■原因(検証手段がなく、断定には至っていません)
結果的にはabolishによるヒープ解放がうまくいっていないと思われます。
しかし、abolishコマンドを引数としたaz_execの返却値が1であることから、使用方法に問題があるとは考えていません。
以前 ver7 & Visual Studio 2013 の組み合わせで同じく使用した際には問題が発生しなかったということもあり、
ver9 & Visual Studio 2015 の連携に根本原因があることを疑っています。※Visual Studio 2015 では標準関数のリファクタリングが実施されており、azp.lib をリンクするためには、以下の追加手順が必要でした。
①legacy_stdio_definitions.libを追加リンクすること
②extern “C” { FILE __iob_func[ 3 ] = { *stdin, *stdout, *stderr }; } を定義すること
マイクロソフトの情報では②が伏せられていて、静的ライブラリは最新環境で再コンパイルすることが推奨されています。
https://msdn.microsoft.com/ja-jp/library/bb531344.aspx■ひとまずエラーを回避する方法
・一連の試行ごとに、Prologを再起動する
運用的な回避方法です。オーバーヘッドは大きいですが、この方法しか発見できていません。
起動時にヒープ容量を調節して何サイクルかごとに再起動するのは安全ではないでしょうから、試していません。■(参考)使用箇所の抜粋
#pragma comment(lib,"legacy_stdio_definitions.lib") #pragma comment(lib,"azp.lib") extern "C" { extern int az_init(int argc, char **argv); } extern "C" { extern int az_end(void); } extern "C" { extern int az_exec_unify(char *args, int n, ...); } extern "C" { extern int az_exec(char *goal); } extern "C" { FILE __iob_func[ 3 ] = { *stdin, *stdout, *stderr }; } // Prolog起動 int argcp = 3; char* argvp[] = { "calibration", "-h", "1024" }; char program[] = "['20160413.pl']"; ASSERT( az_init( argcp, argvp ) == 1 ); ASSERT( az_exec( program ) == 1 ); // 全体の繰り返しを何回か実行していると、assertzの実行時にエラーとなります。 while (...) { // assertz実行 while (...) { char goal[ 128 ]; sprintf_s( goal, "assertz(plot(%d,%d))", plot->x(), plot->y() ); ASSERT( az_exec( goal ) == 1 ); } // 目的クエリの実行 char retVar1[ 256 ]; char retVar2[ 256 ]; char retVar3[ 256 ]; char retVar4[ 256 ]; sprintf_s( goal, "query(%d,%d,A,B,C,D,E)", data->x(), data->y() ); if ( az_exec_unify( goal, 4, retVar1, retVar2, retVar3, retVar4 ) ) { ... } else { ... } // abolish実行 sprintf_s( goal, "abolish(plot,2)" ); ASSERT( az_exec( goal ) == 1 ); // Prolog再起動 /* ASSERT( az_end() == 1 ); ASSERT( az_init( argcp, argvp ) == 1 ); ASSERT( az_exec( program ) == 1 ); */ }
-
マキゲスト
失礼しました。文面が非常に読みにくいですね。改行がなくなってしまいまして・・・。
ビジュアルタブで編集すれば改行できるでしょうか。
この返信をもって確認させてください。
改行できていた場合は、追加の返信により再投稿いたします。
-
マキゲスト
だめでした。何度もすみません。<br />
htmlタグなら使用可能であるかどうかを確認します。<br>
<p>段落タグでも使えるなら使います。</p>- 最悪でも箇条書きは使えると思いますが・・・
-
WEBサイト管理者キーマスター
掲示板不具合ため、お手数おかけいたしました。
ご報告ありがとうございます。こちら、改行できるよう仕様を変更致しましたので今後も宜しくお願いします。
-
マキゲスト
一旦投稿を諦めます。
どうしても読みにくい場合にその旨返信いただければ、メールをお送りします。申し訳ございませんが、よろしくお願いします。
-
稲葉輝ゲスト
マキさま、AZ-Prologをお使いいただきありがとうございます。
また、貴重な情報感謝します。
Visual Studio 2015につきましては問題が多く、HPーマニュアルに記載されているように未サポートです。
対応予定でありますが、当面はVS-2013をお使いいただきますようおねがいします。
https://www.az-prolog.com/manual/manuals/manual_compiler.html#compiler
-
マキゲスト
ご回答ありがとうございます。
申し遅れましたが、Visual Studio 2015 について、未対応である旨は承知しておりました。
しかし、型推論・ラムダ式にかかる新機能を取り入れたく(かつ、AZ-Prologも活用したく)前述のような環境を模索している次第であります。
簡単に対応いただけるようならばと軽い気持ちで投稿しましたが、難しそうですね。
今思えばタイトルの付け方が悪く、ご迷惑をおかけしました。現状は2013でコンパイルできないソースがそれなりにあるため、大きく影響しないうちはそっとしておくつもりです。
対応時にはお知らせいただければ幸いです。よろしくお願い致します。
-
-
稲葉輝ゲスト
大変遅れましたが、2017年3月22日、Version9.61でVS2015,VS2017の対応版をリリースしましたのでお試しください。
-
マキゲスト
ありがとうございます。確認させていただきます。
-
-
DesignHOWゲスト
Ландшафтный дизайн под ключ от команды специалистов ландшафтного профиля учитывает ландшафтный дизайн, благоустройство и озеленение. https://t.me/s/landscap_design Мы ценим время и работаем согласно установленным сроком с гарантией фиксации цены на весь объем ландшафтных работ.
-
DesignHOWゲスト
Ландшафтный дизайн под ключ выполним в кратчайшие сроки. Весь комплекс работ: дизайн, рабочее проектирование, смета, работы по ландшафтному строительству и посадке растений, уход за садом. Ландшафтный дизайн под ключ за 90 дней – это реально.
-
DesignHOWゲスト
Ландшафтный дизайн под ключ – это Ваше преимущество. Вы получаете готовый сад с гарантией в кратчайшие сроки. Ландшафтный дизайн под ключ от нашей компании учитывает все виды проектных и строительных работ, а также работы по озеленению и уходу.
-
DesignHOWゲスト
Ландшафтный дизайн под ключ сэкономит Ваше время и деньги. Работая с нашей командой Вы получаете гарантию фиксации цены на создание всего сада. Ландшафтный дизайн под ключ – это гарантия на все виды работ и материалов, используемых для создания сада.
-
DesignHOWゲスト
Ландшафтный дизайн под ключ от профессионалов! Все виды ландшафтных работ – от проектирования до реализации проекта. Ландшафтный дизайн под ключ включает: мощение, укладку коммуникаций, посадку деревьев и кустарников, устройство газонов и цветников.
-
LandHOWゲスト
Ландшафтный дизайн под ключ от команды специалистов ландшафтного профиля учитывает ландшафтный дизайн, благоустройство и озеленение. https://telegra.ph/Landshaftnyj-dizajn-pod-klyuch-01-22 Мы ценим время и работаем согласно установленным сроком с гарантией фиксации цены на весь объем ландшафтных работ.
-
LandHOWゲスト
Ландшафтный дизайн под ключ – это Ваше преимущество. Вы получаете готовый сад с гарантией в кратчайшие сроки. https://telegra.ph/Landshaftnyj-dizajn-pod-klyuch-01-22 от нашей компании учитывает все виды проектных и строительных работ, а также работы по озеленению и уходу.
-
MichaelNicゲスト
-
-
投稿者投稿