2010-12-12 53 views
0

嗨 我不是一個C++開發人員,我試圖編譯別人的應用程序。構建成功,但我得到5'不一致的DLL鏈接'警告。編譯別人的vs C++應用程序 - 不一致的鏈接

該dll構建,但在現有的dll所在的同一場景中不起作用。沒有代碼更改。

一些google搜索後,我認爲它與此有關,在頭文件中找到:

#ifdef CPLAPPLET_PROGRAM_EXPORTS 
#define CPLAPPLET_PROGRAM_API __declspec(dllexport) 
#else 
#define CPLAPPLET_PROGRAM_API __declspec(dllimport) 
#endif 

,並有代碼,說CPLAPPLET_PROGRAM_EXPORTS在命令行上定義的註釋。

的警告發生在導出的功能,如:

HRESULT _stdcall CCplApplet_PROGRAM::DllUnregisterServer() 
{ 
// our code added here 
    return 0; 
} 

可有人點我在這裏向正確的方向?

謝謝。

編輯處理意見:

我在VS 2008中創建一個C++的Win32 DLL項目,我已經添加了他們的.cpp,.h和.DEF文件到該項目,但僅此而已。我不知道是否需要專門處理.def文件或其他內容?

頭文件中定義的方法,像這樣:

class CPLAPPLET_LNK_PROGRAM CCplApplet_PROGRAM { 
public: 
static LONG APIENTRY CPlApplet(HWND hWnd, UINT uMsg, LONG lParam1, LONG lParam2); 

private: 
... 
HRESULT _stdcall DllUnregisterServer(void); 
...  
    }; 

.def文件:

LIBRARY "CplApplet_PROGRAM" 

EXPORTS DllUnregisterServer PRIVATE 
+0

您正在構建他們的解決方案嗎?有沒有機會丟失鏈接線的.def文件規範? – Rup 2010-12-12 15:58:25

+0

如何在頭文件中定義'DllUnregisterServer'?你是否在頭文件中使用'class CPLAPPLET_PROGRAM_API CCplApplet_PROGRAM ...'?另外,如果你是從VS建立的標誌定義? – Asha 2010-12-12 16:06:13

+0

謝謝 - 我已編輯解決這些問題。阿莎,你指的是什麼標誌? – 2010-12-12 16:17:33

回答

3

右鍵單擊在解決方案資源管理器窗口,屬性的項目。配置屬性,C/C++,預處理器,預處理器定義設置。驗證您在那裏看到CPLAPPLET_PROGRAM_EXPORTS。如果你沒有,然後添加它。

您也很可能需要.def文件,以便重新命名導出。確保它存在於項目的文件列表中。構建完成後,在生成的DLL上使用Dumpbin.exe/exports,並確保導出存在,並且正確拼寫「DllUnregisterServer」而沒有任何其他字符。需要作者的幫助不是不太可能,因爲COM出口似乎處理的方式非常不規範。

+0

,這真是太棒了! – rostamn739 2016-06-15 14:51:35

相關問題