globalObject
にアクセスする方法callbackFunction
でアクセスできますか?サードパーティ製のライブラリから呼び出されるコールバック関数内でオブジェクト/変数にアクセスする/渡す方法は?
私はlibraryFunction
の方法を持つサードパーティライブラリlibrary.h
を使用しています。 libraryFunction
の出力はlibraryFunctionOutput
で、コールバック関数callbackFunction
に渡されます。
コールバック関数callbackFunction
で別のオブジェクト(例:globalObject
)を渡す方法を教えてください。
残念ながら、第三者のライブラリがコンパイルされているため、変更することはできません。ドキュメントで
#include <stdio.h>
#include "library.h"
int callbackFunction(int libraryFunctionOutput):
printf("%s, %d", libraryFunctionOutput, globalObject);
return 1;
int main(int argc, char* argv[])
{
int globalObject = 0;
libraryFunction(callbackFunction);
}
として、関数が示されています:MathrelCallback
構造体は以下のように定義されて
int __stdcall libraryFunction(const char* filename,
unsigned int flags,
int userID,
MathrelCallback callbackFunction);
:
struct MathrelCallback {MathrelHeader header;
MathrelInfo data;
unsigned int Type;
};
'libraryFunction'の署名は何ですか?それがラムダを受け入れるなら、答えは簡単です。グローバル変数に 'globalObject'をコピーする以外は、関数ポインタだけを受け入れることができるかどうかわかりません。 – Franck
ほとんどのCスタイルのAPIもコンテキストポインタを渡します。あなたは文脈のためにそれを使うべきです。 – krzaq
@Franckドキュメントでライブラリの外観を追加しました。私はラムダを受け入れないと思う。グローバル変数のglobalObjectは、比較的小さなアプリケーションなので、私は満足しています。 @krzaq残念ながら他のコンテキスト引数は 'libraryFunction'以外には渡されず、それ以外のコールバック関数は使用できません。 –