2009-04-29 26 views
3

我做了About.com guide to embedding dll's in Delphi EXE's這似乎工作,只要我沒有實際使用DLL作爲外部函數。無論如何要讓我鏈接的代碼早於uses子句中引用的單元工作。
我試過了:問題啓動程序與嵌入作爲資源的dll

  • 正是這樣做的代碼說的。
  • 將此代碼放置在使用使用外部函數的單元的窗體的初始化部分。
  • 將此代碼放置在使用外部功能的設備的初始化部分。

並通過外部功能我指的是,看起來像一個功能:

function MyFunction: Integer; stdcall; external 'fundll.dll'; 

我得到的問題是通常的「fundll.dll」無法加載(因爲它不是在目錄)。 Zarko的代碼工作起來(非常的甜蜜,它創建了該文件夾中的dll),當代碼變得那麼遠時。但是當我使用我需要的外部函數時,它甚至在項目甚至滾動之前崩潰。

+0

如果你調用從它的功能,那麼它是不是一個「資源DLL」。這是一個恰好嵌入爲資源的DLL。資源DLL是其唯一目的是保存資源的資源。 – 2009-04-29 19:56:51

回答

3

,如果你想調用它的函數,你有兩個選擇......

1)使用一個EXE/DLL打捆而不是資源的方法。 2)不要使用外部樣式聲明鏈接到庫。而是使用LoadLibrary,GetProcAddress等來引用你需要調用的函數。

資源方法和作爲外部函數的聲明不會混合。 Windows想要將您的exe文件鏈接到內存中的dll上之前您的代碼運行提取dll。

6

你不能用外部函數做到這一點 - 使用調用LoadLibrary()GetProcAddress的()而不是提取DLL後,一切都應該工作。

原因是任何代碼只有在OS加載程序解決了所有入口點後纔會執行。如果你願意的話,可以是雞和雞蛋的問題。