問題タブ [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.

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

language-agnostic - 「C-API」の言語に依存しない方法で型を記述するメタ言語

型 (構造体/レコード、関数型とそのパラメーターなど) を記述するメタ言語と、ツールに供給できる定数、または複数のターゲット言語のプロトタイプを作成するためのコードを記述できるメタ言語はありますか? 注: (E)BNF は、私が探しているものにさえ近くありません。

IDL は私が必要としているものに近いように見えますが、私が調べたフレーバーは、オブジェクト指向ではないシステムをカバーしていませんでした。Microsoft の M は .NET に関連付けられているようで、私がそれを必要とするシステムは、通常「C-API」と呼ばれるものです。派手なインターフェース定義やリモートオブジェクト指向のものはありません。

0 投票する
2 に答える
419 参照

api - MATLAB C API: mxDestroyArray(NULL) は何をしますか?

MATLAB のmxDestroyArray()関数を使用していますが、適切なエラー処理を行うにはどうすればよいでしょうか。

私が呼び出した場合、または同様の場合、成功時と失敗時、つまりメモリがいっぱいの場合mxCreate*Array()に有効なポインターを取得します。NULL

この方法でいくつかのアレイを作成し、少なくとも 1 つが失敗した場合、不要になったものをすべて解放したいと考えています。

ここで私は疑問に思っています:すべての値を明示的にチェックする必要がありますか?

または、チェックを省略できますか?

0 投票する
3 に答える
1888 参照

c++ - CAPI境界を越えて例外を渡す

古いCAPIを使用するC++でライブラリを作成しています。私のライブラリのクライアントは、CAPIを介して呼び出される私のライブラリを介して間接的に呼び出されるコールバック関数を指定できます。これは、クライアントコールバックのすべての例外を処理する必要があることを意味します。

私の質問はこれです:C API境界が再交差し、実行がC ++ランドに戻ったら、境界の片側で例外をキャッチして再スローし、クライアントコードで例外を処理できるようにするにはどうすればよいですか?

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

c - DBus同期呼び出しタイムアウト

完了するのに膨大な時間(約3分)を必要とするメソッドを公開するDBusサーバーがあります。クライアントは、このメソッドへの同期呼び出しを実行します。

問題は、正確に25秒後に、「応答を受信しなかった」ためにクライアントがエラーをスローすることです。

残念ながら、クライアントを変更できないため、本来のように呼び出しを非同期にすることはできません。

サーバー構成でこの行を使用しようとしました:

しかし、状況は変わりません。

何か案が?

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

ios - C APIでメモリ内SQLiteデータベースのサイズを測定するには?

iOSでインメモリSQLite dbのストレステストを行っています。

しばらくすると、OCUnit がこのエラーを発生させました。

これはメモリの限界に達していると思います。しかし、現在のデータベースのサイズを把握できません。私は試した、

しかし、これは常に0forを返し、すべて同じ更新currentに対して何らかの値を返します。マニュアル エントリpeakを読みましたが、db サイズ機能のようには見えません。私は間違った場所を掘っていると思います。C-API でデータベースのサイズを取得するにはどうすればよいですか?

0 投票する
2 に答える
8395 参照

multithreading - SQLite: 読み取りと書き込みのためにスレッド間で接続を共有する

SQLite (バージョン 3.7.2) を使用してデータを格納するアプリケーションがあります。同じ SQLite データベースに対して書き込みと読み取りを行う複数のスレッド間で SQLite 接続を共有しています。SQLite は DSQLITE_THREADSAFE=1 でコンパイルされます。これは、SQLite がシリアライズ モードであることを意味します。

SQLite ドキュメントからの引用

シリアル化: シリアル化モードでは、SQLite を複数のスレッドで制限なく安全に使用できます。

それどころか、SQLite Wikiのエントリには次のように書かれています

複数のスレッドで同時に同じデータベース接続を使用しないでください

何百ものスレッドを生成し、正常に動作する読み書き用の SQLite ハンドルを共有するサンプル アプリケーションを試してみました。

では、SQLite wiki エントリは古くなっていますか、それとも SQLite は、同じ接続を使用して同時に異なるスレッドから発生する読み取りと書き込みを処理できないのでしょうか?

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

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 の一部

データベースを操作するコード

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

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がどのように機能するのか完全には理解していません。どんな助けでも大歓迎です!

編集:いくつかの最小限のコード:

0 投票する
2 に答える
2185 参照

c++ - PyObject_Printがクラッシュするのはなぜですか?

私はPython3.3C-APIを試して、計画されている次のプロジェクトで使用できるかどうかを確認しましたが、ほとんどすぐに問題が発生しました。

この単純なコードでさえ、戻り値として0xc0000005でクラッシュします。

テストでは、PyObject_Printがクラッシュを生成していることが示されています。このコードや私の設定の何が問題になっていますか?

0 投票する
0 に答える
111 参照

python - Python C_API:ネストされたクラスを定義する方法は?

現在、「生の」C-APIを使用してpython用のC拡張モジュールを作成しています。次のpythonコードのように「ネストされたクラス」を定義できるようにしたいと思います

AB のようなネストされたクラスを C-API で作成するにはどうすればよいですか?