問題タブ [c-api]
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.
language-agnostic - 「C-API」の言語に依存しない方法で型を記述するメタ言語
型 (構造体/レコード、関数型とそのパラメーターなど) を記述するメタ言語と、ツールに供給できる定数、または複数のターゲット言語のプロトタイプを作成するためのコードを記述できるメタ言語はありますか? 注: (E)BNF は、私が探しているものにさえ近くありません。
IDL は私が必要としているものに近いように見えますが、私が調べたフレーバーは、オブジェクト指向ではないシステムをカバーしていませんでした。Microsoft の M は .NET に関連付けられているようで、私がそれを必要とするシステムは、通常「C-API」と呼ばれるものです。派手なインターフェース定義やリモートオブジェクト指向のものはありません。
api - MATLAB C API: mxDestroyArray(NULL) は何をしますか?
MATLAB のmxDestroyArray()
関数を使用していますが、適切なエラー処理を行うにはどうすればよいでしょうか。
私が呼び出した場合、または同様の場合、成功時と失敗時、つまりメモリがいっぱいの場合mxCreate*Array()
に有効なポインターを取得します。NULL
この方法でいくつかのアレイを作成し、少なくとも 1 つが失敗した場合、不要になったものをすべて解放したいと考えています。
ここで私は疑問に思っています:すべての値を明示的にチェックする必要がありますか?
または、チェックを省略できますか?
c++ - CAPI境界を越えて例外を渡す
古いCAPIを使用するC++でライブラリを作成しています。私のライブラリのクライアントは、CAPIを介して呼び出される私のライブラリを介して間接的に呼び出されるコールバック関数を指定できます。これは、クライアントコールバックのすべての例外を処理する必要があることを意味します。
私の質問はこれです:C API境界が再交差し、実行がC ++ランドに戻ったら、境界の片側で例外をキャッチして再スローし、クライアントコードで例外を処理できるようにするにはどうすればよいですか?
c - DBus同期呼び出しタイムアウト
完了するのに膨大な時間(約3分)を必要とするメソッドを公開するDBusサーバーがあります。クライアントは、このメソッドへの同期呼び出しを実行します。
問題は、正確に25秒後に、「応答を受信しなかった」ためにクライアントがエラーをスローすることです。
残念ながら、クライアントを変更できないため、本来のように呼び出しを非同期にすることはできません。
サーバー構成でこの行を使用しようとしました:
しかし、状況は変わりません。
何か案が?
ios - C APIでメモリ内SQLiteデータベースのサイズを測定するには?
iOSでインメモリSQLite dbのストレステストを行っています。
しばらくすると、OCUnit がこのエラーを発生させました。
これはメモリの限界に達していると思います。しかし、現在のデータベースのサイズを把握できません。私は試した、
しかし、これは常に0
forを返し、すべて同じ更新current
に対して何らかの値を返します。マニュアル エントリpeak
を読みましたが、db サイズ機能のようには見えません。私は間違った場所を掘っていると思います。C-API でデータベースのサイズを取得するにはどうすればよいですか?
multithreading - SQLite: 読み取りと書き込みのためにスレッド間で接続を共有する
SQLite (バージョン 3.7.2) を使用してデータを格納するアプリケーションがあります。同じ SQLite データベースに対して書き込みと読み取りを行う複数のスレッド間で SQLite 接続を共有しています。SQLite は DSQLITE_THREADSAFE=1 でコンパイルされます。これは、SQLite がシリアライズ モードであることを意味します。
SQLite ドキュメントからの引用
シリアル化: シリアル化モードでは、SQLite を複数のスレッドで制限なく安全に使用できます。
それどころか、SQLite Wikiのエントリには次のように書かれています
複数のスレッドで同時に同じデータベース接続を使用しないでください
何百ものスレッドを生成し、正常に動作する読み書き用の SQLite ハンドルを共有するサンプル アプリケーションを試してみました。
では、SQLite wiki エントリは古くなっていますか、それとも SQLite は、同じ接続を使用して同時に異なるスレッドから発生する読み取りと書き込みを処理できないのでしょうか?
linux - Berkeley DB: C API 呼び出し中の前回の異常終了により、futex_wait でスタックする
カーネル 2.6.18-238_xen_AMD64 を搭載した RHEL5.6 で berkeley db 4.3 (/usr/lib64/libdb-4.3.so) を使用して、C でプログラミングしています。
私のテスト (1,000,000 個のキーと値のペアの書き込み) では、db に対する操作の実行中に 1 つのプロセスが異常終了 (ctrl + c、kill、または assert の失敗) した場合、その db に対するその後の操作は開くときにブロックされます。Strace は、プロセスが __db.00x (例: __db.001、__db.002、__db.003) ファイルを開いた後、futex(ptr_to_something, FUTEX_WAIT, 2, NULL) 呼び出しでスタックしたことを示しています。
ロックをクリアする唯一の方法は __db.00x ファイルを削除することであり、次のテストではデータベースが破損していないことが示されました。それは私の要件を満たしていますが、この問題を解決するためのより良い(またはよりエレガントな)方法があるかどうか疑問に思っています。
ここでは、 strace stderr とデータベースを操作するためのコードをリストしました。
strace stderr の一部
データベースを操作するコード
python - 再帰を伴うPythonCAPI-segfaults
私はC++でPythonのCAPI(2.7)を使用して、Pythonツリー構造をC++ツリーに変換しています。コードは次のようになります。
Pythonツリーは、子のリストを持つクラスとして再帰的に実装されます。リーフノードは単なるプリミティブ整数です(クラスインスタンスではありません)
モジュールをロードし、ここのコードを使用してC ++からpythonメソッドを呼び出します。これにより、ツリーのインスタンスpython_treeがC++のPyObjectとして返されます。
取得したPyObjectを再帰的にトラバースします。子のリストを取得するには、次のようにします。
/li>
非常に簡単で、PyObject_GetAttr(Objects / object.c:1193ですが、APIコードが表示されません)の呼び出しで、最終的にセグメンテーション違反が発生するまで機能します。これは、ツリーの最後のリーフノードへの訪問時に発生するようです。
問題を特定するのに苦労しています。C APIで再帰を行うための特別な考慮事項はありますか?Py_INCREF / Py_DECREFを使用する必要があるのか、これらの関数などを使用する必要があるのかわかりません。正直に言うと、APIがどのように機能するのか完全には理解していません。どんな助けでも大歓迎です!
編集:いくつかの最小限のコード:
c++ - PyObject_Printがクラッシュするのはなぜですか?
私はPython3.3C-APIを試して、計画されている次のプロジェクトで使用できるかどうかを確認しましたが、ほとんどすぐに問題が発生しました。
この単純なコードでさえ、戻り値として0xc0000005でクラッシュします。
テストでは、PyObject_Printがクラッシュを生成していることが示されています。このコードや私の設定の何が問題になっていますか?
python - Python C_API:ネストされたクラスを定義する方法は?
現在、「生の」C-APIを使用してpython用のC拡張モジュールを作成しています。次のpythonコードのように「ネストされたクラス」を定義できるようにしたいと思います
AB のようなネストされたクラスを C-API で作成するにはどうすればよいですか?