2010-09-30 173 views
1

Im在VS2008中開發MFC DLL項目。 該DLL編譯確定,我可以從一個承包商爲我開發的GUI exe文件中調用它。需要爲我的dll安裝Visual C++可再發行組件(也可能是在C++中開發的exe)刪除外部依賴到MFC DLL項目

另一家公司想要許可我的dll與他們的C++ exe一起使用。他們已經要求我的dll沒有外部依賴。是否有可能編譯我的DLL來刪除像Visual C++可再發行組件這樣的所有外部依賴項?

設置/ MT是否做到這一點? 我已閱讀Should I compile with /MD or /MT?這是有道理的,但我關心的是地獄。

這可以創建問題與EXE調用我的DLL?我讀了一些關於exe和dll需要使用相同的Visual C++ Redistributables或其他地方的地方。

我對C++有點新鮮。任何意見讚賞。

回答

1

您可以連接CRT的靜態版本(是,/ MT),但它是相當危險的。你必須仔細審查你的出口。確信它們都不會返回C++對象,甚至不會返回std :: string(或CString)。或者客戶端代碼必須發佈的任何指針。這會出錯,因爲客戶端將擁有自己的CRT副本並使用不同的堆。這將泄漏返回的對象/指針,當它們的安全堆管理器檢測到指針不屬於堆時,崩潰Vista和Win7上的程序。

這可能是一個爭論什麼是「外部依賴」的含義。依賴於CRT並不完全是外部的。然而,您將不得不爲他們提供構建在他們使用的相同版本的Visual Studio上的DLL版本。如果版本匹配,CRT只能共享。

+0

沉迷於MFC會讓你後悔....歡呼〜 – wengseng 2010-09-30 15:32:51

1

爲什麼不將所有依賴的dll打包到安裝程序包中併發布給您的客戶?

我已經看到了一些軟件包的不包括VC的依賴庫....