2009-04-29 27 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加载程序解决了所有入口点后才会执行。如果你愿意的话,可以是鸡和鸡蛋的问题。