静的ライブラリにC関数があります。これをAと呼びましょう。次のインターフェイスを使用します。
int A(unsigned int a, unsigned long long b, unsigned int *y, unsigned char *z);
この関数はyazの値を変更します(これは確かです)。extern "C"を使用して、動的C++ライブラリ内から使用します。
さて、これが私を驚かせるものです:
- yは正しく設定され、zは変更されません。私が正確に意味するのは、両方が666の(ポイントされた)値で初期化された場合、yがポイントした値は呼び出し後に変更されますが、zがポイントした値は変更されません(まだ666)。
- Cバイナリから呼び出されると、この関数はシームレスに機能します(zが指す値が変更されます)。
- 同じプロトタイプを持つ関数を使用してダミーのCライブラリを作成し、それを動的C ++ライブラリ内から使用すると、非常にうまく機能します。同じ変数を再利用してA(..)を呼び出すと、以前と同じ結果が得られます。zは変更されません。
上記の点は、私の変数の宣言が愚かな間違いではないことを示していると思います。
明らかに行き詰まっていて、Cライブラリを変更できません。何が問題になるのか、何か手がかりはありますか?私はC/C ++インターフェースの問題、たとえばchar*の解釈方法について考えていました。
編集:私はついに何が問題だったのかを見つけました。以下の私の答えを参照してください。