問題タブ [btrieve]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1061 参照

java - Java から Pervasive/Btrieve DB (DDF + DAT ファイル) にアクセス

パーベイシブ/btrieve データベースである *.DDF および *.DAT ファイルを含むフォルダーがあります。DDF Periscope (ddf-periscope.com) でデータベースのコンテンツを開いて表示できます。

ddf periscope を使用して各テーブルから個別にデータをエクスポートできますが、Java を使用して同じことをしたいと考えています。DB 内のデータにアクセスし、それらを CSV ファイル、POJO、またはデータを操作できる任意の方法にエクスポートします。

これは可能ですか?

0 投票する
1 に答える
195 参照

rust - Rust から Btrieve BTRCALL 関数を呼び出す ACCESS_VIOLATION

Rust から Btrieve (非常に古いデータベース エンジン) を呼び出そうとしています。少し長くなりますが、Rust から FFI を試すのはこれが初めてです。

Btrieve エンジンは、32 ビット DLL である w3btrv7.dll という DLL に実装されています。32ビットのMSVCツールを使用してインポートライブラリを作成しました(公式のものは付属していません):

次に、32 ビットの Rust ツールチェーンstable-i686-pc-windows-msvc をインストールし、それをデフォルトとして設定しました。公式の Btrieve ヘッダーに Bindgen バーフがあるため、自分で作成する必要がありました。幸いなことに、ラップする必要がある関数は 1 つだけです BTRCALL

私はこれを私のwrapper.hに持っています:

私は次のようにリンクしています:

これは機能しているようです: プログラムが実行され、32 ビットの exe であり、Process Explorer でそれが読み込まれたことを確認できますw3btrv7.dll

bindgen を介してヘッダーを送信すると、次のようになります。

タイプとサイズはすべて正しく集計されているように見え、完全に機能する C# アプリケーションから取得した DllImport と一致します。

keyNumber少し異なりますが、符号付きと符号なしの両方のバリエーションでバイトとショートの両方を試しましたが、まだ機能しません。

残念ながら、プログラムを実行すると、BTRCALL への最初の呼び出しの後に爆発します。(まあ、実際には、この呼び出しが含まれている関数が返されるときです)。すべてのパラメーターをローカル変数に抽出し、それらのタイプをチェックしたところ、すべてが正しいように見えました。

それはプログラムをクラッシュさせます

私が読んだことから、これはおそらく不適切なアドレスアクセスによるものです。

実際、変数をチェックするためにいくつかのトレースを入れると、値によって渡されるローカル変数が上書きされているように見えるという点で、いくつかの非常に興味深い動作があります。ここのログは、バッファの最初の 30 バイトだけをダンプします。残りはゼロだからです。

pos_block_ptrとりわけ、通知は 0 に設定されています。対照的に、C# コードからまったく同じ呼び出しを正常に実行すると、データが の最初の 18 バイトに書き込まれるだけpos_block で、他の変数は変更されません。

少し凶暴になり、メモリを上書きし始めたようです...

この時点で、次に何を試すべきかわかりません。