問題タブ [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.
java - Java から Pervasive/Btrieve DB (DDF + DAT ファイル) にアクセス
パーベイシブ/btrieve データベースである *.DDF および *.DAT ファイルを含むフォルダーがあります。DDF Periscope (ddf-periscope.com) でデータベースのコンテンツを開いて表示できます。
ddf periscope を使用して各テーブルから個別にデータをエクスポートできますが、Java を使用して同じことをしたいと考えています。DB 内のデータにアクセスし、それらを CSV ファイル、POJO、またはデータを操作できる任意の方法にエクスポートします。
これは可能ですか?
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
で、他の変数は変更されません。
少し凶暴になり、メモリを上書きし始めたようです...
この時点で、次に何を試すべきかわかりません。