別の Visual Studio 2010 プロジェクトの C コードから C 関数を呼び出すときのリンカー エラー
C コードを C プロジェクトに統合しようとしたときVisual Studio 2010 では、開発者がリンカー エラーに遭遇する可能性があります。この問題は、静的ライブラリまたは動的ライブラリをリンクするときに発生します。コード構成の不一致や、ファイル命名とマクロの不一致がこれらのエラーにつながることがよくあります。
適切なファイル構成と宣言
C および C では、各オブジェクトまたはモジュールは次のようにする必要があります。独自のヘッダー ファイルとソース コード ファイルで明確に分離する必要があります。複数の C 関数の場合、ヘッダー ファイル (functions.h など) とソース コード ファイル (functions.c など) が推奨されます。
関数のエクスポート
他のプロジェクトから関数にアクセスできるようにするには、適切なエクスポート メカニズムを実装する必要があります。 C では、ヘッダー ファイルの関数宣言の前に extern キーワードを追加することでこれを実現できます。ただし、 C では、 extern "C" マクロを使用する必要があります。さらに、コードが関数をエクスポートするかインポートするかを指定するマクロを定義する必要がある場合があります。
コンパイラとリンカーの設定
Visual Studio 2010 では、特定のプロジェクト設定が必要になる場合があります。適切なコンパイルとリンクを確保するために構成する必要があります。これらの設定には、マクロ展開および関数のエクスポート/インポート動作の制御に使用できるプリプロセッサ定義が含まれます。
再編成されたコード構造
<code class="c">#include <stdio.h> #if defined(_WIN32) # if defined(FUNCTIONS_STATIC) # define FUNCTIONS_EXPORT_API # else # if defined(FUNCTIONS_EXPORTS) # define FUNCTIONS_EXPORT_API __declspec(dllexport) # else # define FUNCTIONS_EXPORT_API __declspec(dllimport) # endif # endif #else # define FUNCTIONS_EXPORT_API #endif #if defined(__cplusplus) extern "C" { #endif FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**); FUNCTIONS_EXPORT_API char *g_fmt(char*, double); FUNCTIONS_EXPORT_API void freedtoa(char*); #if defined(__cplusplus) } #endif</code>
<code class="c">#define FUNCTIONS_EXPORTS #include "functions.h" char *dtoa(double, int, int, int*, int*, char**) { // Function Implementation } char *g_fmt(char*, double) { // Function Implementation } void freedtoa(char*) { // Function Implementation }</code>
これらのガイドラインを採用し、適切なファイル構成、関数宣言、およびエクスポート メカニズムを確保することで、C コードを Visual Studio 2010 の C プロジェクトに統合し、異なるプロジェクト間で C コードから C 関数を呼び出すときのリンカー エラーを解決できます。
以上がC コードを Visual Studio 2010 の C プロジェクトに統合し、リンカー エラーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。