2015-07-22 55 views
0

我已經在VS 2013中創建了C++ * .dll。這在我的開發機器上運行良好,但在客戶機上運行時發生錯誤。無法加載庫問題與外部依賴

enter image description here

這裏是cpp文件。

#include "stdafx.h" 
#include "EasyDLL.h" 

using namespace System; 

double WINEXPORT EASYDLL_GetServerDateTime(int clientServerTimeDiff) 
{ 
    System::DateTime clientDateTime = System::DateTime::Now; 
    System::TimeSpan duration(0, 0, clientServerTimeDiff); 
    System::DateTime serverDateTime = clientDateTime.Add(duration); 

    String^ strTemp = serverDateTime.ToString("yyyyMMddHHmmss"); 

    double result = double::Parse(strTemp); 

    return result; 
} 

我相信原因是,外部依賴關係不存在於客戶機上。

我對C++沒有多少經驗。

引發問題:
當你編譯(並且我只是在調試時編譯),外部依賴和一個dll(mscorlib.dll)中有一大堆頭文件。

mscorlib.dll存在於客戶端計算機上的相同位置,所以我有點折扣作爲問題,但標題不存在。

問題:
我是否需要將這些頭文件與我創建的DLL一起發出,還是應該將它們編譯到我的dll中?

下面是一些外部依賴關係的屏幕截圖。當項目創建時,他們中的大多數似乎默認在項目中。
enter image description here

編輯:

改變項目釋放它似乎是另一臺機器,我開發的機器上運行,不得不等待,直到明天來測試客戶端的經過。

儘管它已經工作到目前爲止,我檢查了DependencyWalker,並在看我的dll時得到以下內容,這是否有什麼值得擔憂的?

enter image description here

+1

問題是您正在構建調試版本,而您使用的另一臺機器沒有安裝運行時的調試版本? –

+0

構建發佈版本。在輸出上運行'depends.exe'來查看你的外部依賴關係。如果您的DLL很簡單並且不會將堆指針的所有權與它的調用方交換,那麼只需將該項目設置爲針對CRT進行靜態構建即可。 –

+0

嗨安迪,我會在哪裏找到depend.exe? – Hank

回答

1

你並不需要裝運標題與DLL。如果Mats的答案沒有解決它,你可能想嘗試使用這個工具:http://www.dependencywalker.com/ 你可以「看看裏面」一個DLL的方式。根據我的經驗,最好在兩臺機器上運行它,即在開發機器和客戶機器上,因爲在客戶機器上可能看起來像是錯誤,也可能在開發機器上存在,因此將其作爲問題折扣。 祝你好運!

+0

謝謝Spiros,我在問題的最後添加了我的發現。 – Hank