http://www.parashift.com/c%2B%2B-faq/cpp-objs-passed-to-c.html
答えは2つの部分に分かれています。私が推測する最初の部分は、コードが終わるまでです。
最初の部分では、作成者がCで記述された関数またはC関数によって呼び出されるC ++関数(以下を参照)のいずれかに「C」リンケージディレクティブ(extern "C")を使用しているため、リンクは問題ありません。 。
extern void c_function(Fred*); // c function
extern Fred* cplusplus_callback_function(Fred*); // c++ function
これは理にかなっています。
次に、Fred *はmain()からc_function()に渡されます[これは、C++オブジェクトをC関数に渡すことについてauthor/ faqが言っていることだと思います]、次にcplusplus_callback_function()[オブジェクトはCからC++ドメインに返されます働き]。
それで最初の質問、私は上記を正しく理解していますか?それで、よくある質問への答えは、オブジェクトの「ポインタを渡す」だけですか?
2番目の質問、コードが私を失った後に作者が説明したこと。彼は突然、ポインターが等しいかどうかの比較、ベースと派生の間のポインター変換などについて話します。彼は何を言おうとしているのですか?c_functionに渡された後のそのポインタは、すべての魔法を失いましたか?派生クラスを指す基本クラスポインタでしたか?C関数よりもC ++関数に渡された場合、より多くのことができますか?
最後の質問ですが、C++コードがextern"C"ディレクティブでラップされているかどうかはわかりません。変更されたのはリンケージだけですが、それ以外は何もありません。C++コードはまだC++ですよね?すべてのコードをC++で記述したが、一部の関数を意図的にextern "C"でラップした場合、何が失われますか?