2016-11-15 119 views
0

有大量的提供了有關如何從DLL(我已經做過很多次)導出函數的信息,但我聽說,這也可以從一個可執行文件中導出函數,以便外部DLL可以調用它們。導出功能

雖然我已經成功地得到這個工作,它好像有一些問題的切入點:

  • 如果沒有明確設置,則默認爲錯誤的「主」在 一個不起眼的子庫。
  • 如果明確設置,那麼它的輸入參數,argc和argv遭到損壞(ARGC可以〜20000000或〜-700000)。

我無法找到有關從可執行文件導出函數的任何文檔 - 我應該採取暗示而不是做它?

[背景:這是爲了使在Windows和Linux的過程我們工作的一部分。 Linux版本意外地從可執行文件中獲取函數,而不是從助理dll中明確導出的函數(這些函數具有相同的名稱,但具有不同的參數)。我們決定嘗試這種運行,從Windows可執行文件導出功能以及]

回答

0

我張貼這只是總結這個我自己的學習,在沒有更好的答案:

  • 立即加入DEF文件後,鏈接器抱怨說,它不能確定的切入點。正因爲如此,我添加了/ ENTRY參考。然而,在返工期間,我刪除了/ ENTRY,同時刪除了def文件,並且我可以毫無錯誤地進行編譯 - 在此期間,我必須刪除一個微妙的衝突選項。
  • DEF文件確實從.exe導出函數成功,而這些可以然後在這個過程中的一個dll可以使用(如果它鏈接到DELAYIMP.LIB和可執行的.LIB)。
  • 我從來沒有能夠拿到/ ENTRY選項令人滿意的工作,並與在MSDN項目[https://msdn.microsoft.com/en-us/library/f9t8842e.aspx]輕度泄氣的意見結合起來,我認爲沒有理由在這種情況下使用它。

我希望這對其他任何試圖做類似事情的人都有用。我會很樂意重新指定一個更技術性的答覆爲「解決方案」,應該出現......