別のCプログラムでC++で記述されたソフトウェアを使用しようとしています。
必要なコンポーネントを.libファイル内にコンパイルし、以下を使用していくつかのCコードを含めました。
#ifdef __cplusplus
extern "C" {
#endif
このコードは、C呼び出し可能関数内のC++オブジェクトメソッド呼び出しをまとめたものです。オブジェクトはファイルスコープで宣言され、オブジェクトへのポインタは最初に取得され、後でメソッドを呼び出すオブジェクトを参照するために使用されます。例えば:
const void *GetHandle() {
return (void *) &obj;
}
そして、メソッドを呼び出すには:
int GetInt(const void *handle) {
Object *temp = (Object *) handle;
return temp->getInt();
}
これは問題の有効な解決策ですか?現時点では、CプログラムのGetHandle()メソッドだけで、戻り値をいくつかのconst void *変数に割り当てようとすると、「エラーC2099:初期化子は定数ではありません」というエラーが発生します。
編集
問題を修正しました。私の標準Cの無知は、ここにあります。私はdsPIC用のMicrochipC30に慣れていますが、これは少し異なります。
関数の外部でポインタを宣言して初期化しようとしていました。私はそれらをconstとして設定しましたが、それは実際には必要ではないので、今は外部で宣言してからinit関数で初期化します。また、cppファイルのすべての関数の前にextern "C"を配置すると、すべてがコンパイルされます。だから、助けてくれたみんなに感謝します!