2016-04-11 4 views
0

私は、Win32ウィンドウを実装しなければならなかったassigmentを終えた後、関数をdllにエクスポートしたかったのです。Cエクスポートされていない関数

驚くべきことに、リンカは

  • altough __declspec(のdllexport)/ __declspec(dllimportの)が定義され、正しく使用(または私はC++からに慣れとして)され、参照されていないリンクについて不平を言います。
  • ライブラリがリンカーに正しく指定されています。
  • これらの関数は依存関係ウォーカー内で可視です。

リンカは常に(ドイツ語で)文句:

エラーLNK2019:VerweisアウフNICHT aufgel÷スイーツexternesシンボル "" __declspec(dllimportの)構造体cw_Window * __cdeclのcreateWindow(CHAR *、符号なしショートカット ")"(__imp_?createWindow @@ YAPEAUcw_Window @@ PEADGG @ Z) "をFunktion" main "に追加しました。 C:\ Users \ユーザーjkirs \デスクトップ\ワークスペース\ Unit.MSVC2015-x86-64.88a6cdd3 \ intermediate.Unit.exe \ MSVC2015_x86_64リリース:致命的なエラーLNK1120:1 NICHT aufgelの÷のSTE Externe

マイ機能プロトタイプは次のように定義されています

「API」として次のように定義されて
typedef struct cw_Window cw_Window_t; 
typedef struct cw_Event  cw_Event_t; 

API cw_Window_t* createWindow(char* pTitle, uint16_t nWidth, uint16_t nHeight); 
API void   destroyWindow(cw_Window_t* pWindow); 
API void   pollEvent(cw_Window_t* pWindow, cw_Event_t* pEvent); 

#ifdef _MSC_VER 
    #ifdef CW_EXPORT 
     #define API __declspec(dllexport) 
    #else 
     #define API __declspec(dllimport) 
    #endif 
#else 
    #define API // TODO 
#endif 

私もAPI 『定義「にはextern『C』』を追加しようとしました、ウィット文字列リテラル 'C'については不平を言っています。

誰もがこの問題を自分自身にまだ遭遇しており、正しい方向に向けることができますか?

重要:私はVisual Studio C++ 2015(MSVC_x86_64)を使用しています。私のヘッダーファイルは '.h'で終わり、ソースファイルは '.c'で終わります。

EDIT: libはCコードで再度使用されるはずです。

答えて

0

結局のところ、私が作ったすべてはうまくいっていましたが、ビルドシステムでした。 ビルドシステムは、C言語ではなくC言語のソースファイルとしてファイルを処理しました。

0

だから、extern "C"で基本的な問題と近似解を知っていたようです。しかし、あなたの間違いは:extern "C"をAPI定義に入れないでください。それで定義と宣言をラップ:

typedef struct cw_Window cw_Window_t; 
typedef struct cw_Event  cw_Event_t; 

extern "C" { 
API cw_Window_t* createWindow(char* pTitle, uint16_t nWidth, uint16_t nHeight); 
API void   destroyWindow(cw_Window_t* pWindow); 
API void   pollEvent(cw_Window_t* pWindow, cw_Event_t* pEvent); 
} 

私はそれがexternのように見え、何をしようとしていたことにexternを置くための賢明な場所のように見えますが、extern "C"は異なるルールで別の獣である知っています。あなたはそれについてここでそれ以上のことを読むことができますIn C++ source, what is the effect of extern "C"?

関連する問題