Delphi 为什么LoadLibrary仅在从IDE启动EXE时失败?
关于Delphi 2009,关于一个新的VCL项目:Delphi 为什么LoadLibrary仅在从IDE启动EXE时失败?,delphi,dll,delphi-2009,Delphi,Dll,Delphi 2009,关于Delphi 2009,关于一个新的VCL项目: procedure TForm1.FormCreate(Sender: TObject); var Handle: THandle; begin Handle := loadlibrary('oci.dll'); if Handle <> 0 then begin try ShowMessage('Success'); finally
procedure TForm1.FormCreate(Sender: TObject);
var
Handle: THandle;
begin
Handle := loadlibrary('oci.dll');
if Handle <> 0 then
begin
try
ShowMessage('Success');
finally
FreeLibrary(Handle);
end;
end
else
ShowMessage('Fail');
end;
过程TForm1.FormCreate(发送方:TObject);
变量
手柄:坦德尔;
开始
句柄:=loadlibrary('oci.dll');
如果句柄为0,则
开始
尝试
ShowMessage(“成功”);
最后
免费图书馆(句柄);
结束;
结束
其他的
ShowMessage('Fail');
结束;
如果我从IDE运行Exe,它会失败;如果我从目录运行Exe,只要双击它,它就成功了
请告诉我我错过了什么
谢谢,
弗雷德
编辑:通过IDE启动EXE与Delphi 7一起工作!!如果依赖DLL位于同一目录中,则D2009的问题在于WTf。。。确保你的启动目录在它上面
在Visual Studio中,我也经常遇到这种情况…如果依赖DLL位于同一目录中。。。确保你的启动目录在它上面
我在Visual Studio中也经常遇到这种情况…LoadLibrary失败的常见问题是所需的DLL不在目录中。可能是D2009出于某种原因没有搜索相同的文件夹 为了确保这一点,您应该使用类似于
ShowMessage(SysErrorMessage(GetLastError));
请尝试(甚至暂时)将“oci.dll”与项目的.EXE放在同一目录中,然后重试
以下是一些需要检查的内容:
- oci.dll位于哪个目录中李>
- “PATH”环境变量中是否包含该目录?如果没有,试试看
- 您是否在Delphi Tools/Options/Env variables屏幕中为路径设置了覆盖
- LoadLibrary失败的常见问题是所需的DLL不在目录中。可能是D2009由于某种原因没有搜索相同的文件夹
为了确保这一点,您应该使用类似于
ShowMessage(SysErrorMessage(GetLastError));
请尝试(甚至暂时)将“oci.dll”与项目的.EXE放在同一目录中,然后重试
以下是一些需要检查的内容:
- oci.dll位于哪个目录中李>
- “PATH”环境变量中是否包含该目录?如果没有,试试看
- 您是否在Delphi Tools/Options/Env variables屏幕中为路径设置了覆盖
您是否尝试使用DLL的完整路径(例如,ParamStr(0)的路径加上DLL名称)?我怀疑独立调用可以工作,因为DLL恰好位于当前目录中 并且,从IDE启动时,当前目录与EXE目录不同
您是否尝试使用DLL的完整路径(即,类似于ParamStr(0)的路径加上DLL名称)?oci.DLL所在的目录(系统和用户路径),并且移动DLL不是选择的选项me@Fred. 理解-但是临时移动(或复制)dll将确认这就是问题所在。然后我们可以寻找解决方案…GetLastError返回代码是87,似乎是“不正确的参数”错误_MOD_NOT_FOUND 126 0x7E找不到指定的模块。该路径可以自由编辑,因为它值得-项目选项|调试器|环境块。您可以直接在其中删除覆盖,而不是在注册表中乱搞。oci.dll所在的目录位于路径(系统和用户路径)中,移动dll不是选择me@Fred. 理解-但是临时移动(或复制)dll将确认这就是问题所在。然后我们可以寻找解决方案…GetLastError返回代码是87,似乎是“不正确的参数”错误_MOD_NOT_FOUND 126 0x7E找不到指定的模块。该路径可以自由编辑,因为它值得-项目选项|调试器|环境块。您可以直接在其中删除覆盖,而不是在注册表中乱搞。谢谢,但dll位于系统路径中,与EXE不在同一目录中谢谢,但dll位于系统路径中,与EXE不在同一目录中LoadLibrary发生故障时,GetLastError告诉您原因是什么?GetLastError返回代码是87,当LoadLibrary失败时,它似乎是“不正确的参数”,GetLastError告诉您原因是什么?GetLastError返回代码是87,它似乎是“不正确的参数”