0

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
4

1 に答える 1

0

CコードからC++関数を使用するには、Cなどの関数をエクスポートする必要があるため、静的リンクのLIB_APIの定義を変更します。

#else
 #define LIB_API EXTERN
#endif
于 2013-03-05T11:16:11.520 に答える