Visual Studio で、1 つのプロジェクトを C++ ライブラリで作成し、もう 1 つのプロジェクトを同じソリューションで C で作成し、C を使用してこのライブラリから関数を呼び出すことはできますか?
ライブラリヘッダーにあるもの:
#ifdef __cplusplus
#define EXTERN extern "C"
#else
#define EXTERN
#endif
#ifndef LIB_API
#ifndef LIB_STATIC
#ifdef LIB_EXPORT
#define LIB_API EXTERN __declspec(dllexport)
#else
#define LIB_API EXTERN __declspec(dllimport)
#endif
#else
#define LIB_API
#endif
#endif
LIB_API uint32_t Func(int8_t *arg);
C プロジェクトからこのライブラリに静的にリンクしたいので、ライブラリ プロジェクトから依存関係を選択し、プリプロセッサ定義でマクロ LIB_STATIC を定義し、[C コードとしてコンパイル (/TC)] オプションを選択して、この関数を呼び出します。私が得るのはリンカエラーです
error LNK2019: unresolved external symbol _Func referenced in function _main
lib ファイルを見ると、_Func ではなく Func のようなものが見つかります。私は何を間違っていますか?
(追加するのを忘れました。ライブラリの .cpp モジュールに関数の適切な実装があります)
Angew と AnatolyS からの回答
静的ライブラリの場合、LIB_API を EXTERN に定義する必要があるため、適切なプリプロセッサ ブロックは次のようになります。
#ifndef LIB_API
#ifndef LIB_STATIC
#ifdef LIB_EXPORT
#define LIB_API EXTERN __declspec(dllexport)
#else
#define LIB_API EXTERN __declspec(dllimport)
#endif
#else
#define LIB_API EXTERN
#endif
#endif