2

MFC+vtkプロジェクトでVisualStudio2008を使用しています。以下のようなリンクエラーが発生します。

vtkPBFEAView.obj:警告LNK4217:ローカルで定義されたシンボル?DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ Z(public:void __thiscall vtkMFCWindow :: DrawDC(class CDC *))関数 "protected:virtual void __thiscall CvtkPBFEAView :: OnDraw(クラスCDC*) "(?OnDraw @ CvtkPBFEAView @@ MAEXPAVCDC @@@ Z)

1> vtkMDIView.obj:警告LNK4049:ローカルで定義されたシンボル?DrawDC @ vtkMFCWindow @@ QAEXPAVCDC @@@ Z(public:void __thiscall vtkMFCWindow :: DrawDC(class CDC *))imported 1> vtkPBFEAView.obj:警告LNK4217:ローカルで定義シンボル??0vtkMFCWindow@@ QAE @ PAVCWnd @@@ Z(public:__thiscall vtkMFCWindow :: vtkMFCWindow(class CWnd *))関数 "public:void __thiscall vtkPBFEAViewImpl :: initialize(class CWnd *)"(?initialize @ vtkPBFEAViewImpl @@ QAEXPAVCWnd @@@ Z)

1> vtkMDIView.obj:警告LNK4049:ローカルで定義されたシンボル?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z(public:__thiscall vtkMFCWindow :: vtkMFCWindow(class CWnd *))imported 1> vtkPBFEAView.obj:警告LNK4217:ローカルで定義シンボル??1vtkMFCWindow@@ UAE @ XZ(public:virtual __thiscall vtkMFCWindow ::〜vtkMFCWindow(void))インポートされた関数 "public:virtual void * __thiscall vtkMFCWindow ::`scalar削除デストラクタ'(unsigned int) "(?? _ GvtkMFCWindow @@ UAEPAXI @ Z)

1> vtkMDIView.obj:警告LNK4217:ローカルで定義されたシンボル?? 1vtkMFCWindow @@ UAE @ XZ(public:virtual __thiscall vtkMFCWindow ::〜vtkMFCWindow(void))imported in function "public:void __thiscall vtkMDIViewImpl :: Adjust_contours(int、double 、double) "(?adjust_contours @ vtkMDIViewImpl @@ QAEXHNN @ Z)

1> vtkMFCWindow.obj:エラーLNK2019:未解決の外部シンボル "_ declspec(dllimport)const vtkMFCWindow ::` vftable'"( _imp _ ?? _ 7vtkMFCWindow @@ 6B @)関数" public:__thiscall vtkMFCWindow :: vtkMFCWindow(class CWnd *) "(?? 0vtkMFCWindow @@ QAE @ PAVCWnd @@@ Z)

誰かがこのエラーの理由を私に説明できますか?

前もって感謝します。

4

2 に答える 2

1

ついに私はその問題の答えを見つけました。vtkMFCWindowが/MDオプションで構成され、メインプロジェクトが/MTdオプションで構成されたということでした。したがって、エラーが発生しました。__declspec(dllexport)行を削除する と、うまく機能しました。助けてくれてありがとう。

于 2012-07-19T06:12:01.730 に答える
0

この解決策を見つけて、DLL関数がクライアントアプリで使用するためにエクスポートされなくなったことに腹を立てている可能性がある他の人のために:

MSVCのDLLテンプレートは、次の定型文を提供します。

#ifdef DLLNAME_EXPORTS
  #define DLLNAME_API __declspec(dllexport)
#else
  #define DLLNAME_API __declspec(dllimport)
#endif

プロジェクト設定でDLLNAME_EXPORTSを定義するのを忘れた場合、このメッセージが表示されます。これは、これらの#definesの名前を変更した場合に発生する可能性があります

于 2021-04-18T17:36:09.930 に答える