我已经完成About.com guide to embedding dll's in Delphi EXE's这似乎有效,只要我实际上不使用DLL作为外部函数。无论如何,让我链接的代码比使用子句中引用的单元更早地工作 我试过了:
通过外部函数,我指的是一个看起来像的函数:
function MyFunction: Integer; stdcall; external 'fundll.dll';
我得到的问题是通常的'fundll.dll'无法加载(因为它不在目录中)。当代码到达那么远时,Zarko的代码工作(相当甜,它在该文件夹中创建了dll)。但是当我使用我需要的外部功能时,它只是在项目开始滚动之前崩溃。
答案 0 :(得分:6)
你无法使用外部函数执行此操作 - 在提取DLL后使用 LoadLibrary()和 GetProcAddress(),一切都应该有效。
原因是只有在OS加载程序解析了所有入口点后才会执行任何代码。如果你愿意,那就是鸡和蛋的问题。
答案 1 :(得分:4)
如果您要使用LoadLibrary()和GetProcAddress(),您可能更喜欢使用BTMemoryModule,它允许您使用嵌入的DLL作为资源而不将其保存到文件系统(用户可能无法使用)要做,取决于机器的安全性。)
http://www.jasontpenny.com/blog/2009/05/01/using-dlls-stored-as-resources-in-delphi-programs/
答案 2 :(得分:3)
如果你想在其中调用一个函数,你有两个选择......
1)使用exe / dll捆绑器而不是资源方法。 2)不要使用外部样式声明链接到库。而是使用LoadLibrary,GetProcAddress等来引用您需要调用的函数。
资源方法和函数声明为外部不会混用。 Windows希望在代码运行之前将你的exe链接到内存中的dll 来提取dll。