1

C (cpp ではない) で書かれた大きな静的ライブラリがあり、次のように定義された関数が含まれています。

StructThing* __cdecl DoSomething(); // in header
StructThing* __cdecl DoSomething() { ... } // in .C file

Cベースの製品でそれを使用すると、すべて正常に動作しますが、c++と呼ばれるこの新しいものに移行し始めました!

しかし、cpp ファイルで DoSomething を使用しようとすると、リンク時に未解決の外部シンボル エラーが発生します。

cpp コンパイラは、装飾されたバージョンの関数を探しているようです。

シンボル (関数) を cpp コンパイラで使用できるようにするにはどうすればよいですか? できればソースライブラリを変更せずに(あまり)、最初に考えたのは.defファイルでしたが、静的ライブラリソリューションでは無視されているようです(そのようなvsプロジェクトに適用できるかどうかはわかりません)

しかし、これは簡単なはずです。Windows API はこのように少し書かれていると思います。

誰でも ?

VS 2012 アップデート 3

ティア

4

3 に答える 3

4

ああ、それは「クラシック」に見えるでしょう

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
于 2013-08-23T11:33:52.407 に答える