私はC++フレームワークを持っています。このフレームワークでは、C言語の関数や外部の "C"リンケージを持つC++関数に(時には自動生成される)いくつかの計算が委任されています。これらは低レベルのルーチンであり、非常に迅速かつ最小限のオーバーヘッドで評価されなければならず、通常は別々の共有オブジェクト/ DLLに存在します。DLL境界を越えてFILEオブジェクトを渡すことはできますか?
int my_generated_function(const double* input, double* output, double* work);
dlopen
POSIX上またはWindows上のLoadLibrary
使用してロードされた共有ライブラリに存在します:彼らの現在の署名はの線に沿って何かです。対応する関数ポインタは、POSIXではdlsym(handle, "my_generated_function")
、WindowsではGetProcAddress(handle, TEXT("my_generated_function"))
を使用して抽出されます。
FILEオブジェクトポインタでシグネチャを増やすのは安全で移植性がありますか? my_generated_function
を含む共有オブジェクトが共有オブジェクトをロードするコードとは異なる(しかし、バイナリ互換性のある)コンパイラでコンパイルされている可能性があること
int my_generated_function(const double* input, double* output, double* work,
FILE* logfile);
注意。
"C関数*または* C++関数を外部" C "リンケージで記述したとき、私はそれを暗示していませんでした。私は関数が純粋なCまたはC++コードであることを意味しました。後者の場合は、 'extern" C "'を持ちます。 – Joel
私は、呼び出されたdllがexe/dllの呼び出しと同じc-runtimeを使用してコンパイルされているかどうかという事実に依存すると言いたいと思います。 –
@ArtemyVysotskyこれはどういう意味ですか?同じコンパイラの2つの異なるバージョン、あるいは 'gcc'と' clang'(バイナリ互換)の組み合わせでコードをコンパイルするとどうなりますか? – Joel