2011-02-17 50 views
0

我有一個預先存在的可執行文件,我沒有源代碼,它想要與一個目標文件或靜態庫(C++)鏈接,爲此我可以使用有源碼。我正在使用Visual Studio 8.0。將.obj或.lib鏈接到預先存在的可執行文件

關於這個問題的第一件事,請不要問爲什麼我需要這樣做。我只想知道如何去做(我很確定它可以完成)。

我試着將「myprogram.exe」可執行文件添加到「附加依賴項」C++鏈接器項目屬性中。這將導致以下鏈接器命令行選項:

/OUT: 「C:\用戶\我\文檔\ Visual Studio 2008的\項目\ SampleCppLibrary \調試\ SampleCppLibrary.lib」/ NOLOGO myprogram.exe

當我建立這個項目,我得到這個錯誤:

Error 1 fatal error LNK1107: invalid or corrupt file: cannot read at 0x268 c:\Users\me\Documents\Visual Studio 2008\Projects\SampleCppLibrary\SampleCppLibrary\myprogram.exe 1 SampleCppLibrary

我想通,試圖創建一個鏈接了可能是固有的錯誤可執行的.lib。所以我將項目類型改爲exe,我故意沒有給它一個主要的入口點。相反,我給了它:

extern int _tmain(int argc, _TCHAR* argv[]); 

我的希望是,預先存在的可執行文件中的入口點將填補鏈接器的空白。不幸的是,錯誤沒有改變。這個概念有什麼問題嗎(我已經知道它完全是奇怪的)?或者,也許我需要設置額外的標誌來指示與所鏈接的exe的性質?

回答

0

您不能將可執行文件作爲對象鏈接 - 主要是因爲您只能有一個主文件。

您可能想要做的就是在新應用程序中調用現有的可執行文件作爲system()或popen()調用的函數。

編輯:如果你真的需要提供一個'exe'我已經包含了一個輔助程序之前作爲一個二進制資源(即像一個圖標)調用者寫入%temp%,執行它並刪除它!甚至有一些API可以創建一個臨時文件,這是其他用戶無法看到的。

+0

不幸的是,我不能那樣做。我需要爲現有的可執行文件添加一個新的入口點,以便在作業完成後仍然只有一個文件。入口點甚至不需要調用可執行文件的任何部分(我知道這使得我的請求變得非常奇怪,但請隨它去做)。 – 2011-02-17 22:51:21

相關問題