【发布时间】:2014-07-25 07:34:47
【问题描述】:
我需要为包含的第 3 方库设置两个环境变量(当我的应用程序运行时)。
问题是“那样”它不起作用,但是 当我运行控制台应用程序时,设置这两个变量,然后运行应用程序,一切正常...
如何正确配置这两个变量?
我使用程序:
function SetEnvVarValue(const VarName,
VarValue: string): Integer;
begin
// Simply call API function
if SetEnvironmentVariable(PChar(VarName),
PChar(VarValue)) then
Result := 0
else
Result := GetLastError;
end;
返回 0
也许事情是,我在应用程序启动时加载了库。 当我的应用程序启动时,我设置了变量,但我做得太晚了......?
更多信息
我在 dpr 中包含了两个单元:
'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\magick\ImageMagick.pas' 中的 ImageMagick, 'C:\Program Files (x86)\Borland\Delphi7\Lib\Magick\wand\magick_wand.pas'中的magick_wand;
还有单位:
unit DoItFirst;
interface
uses
Windows, Sysutils;
var
s: string;
error: Integer;
function _putenv_s(const lpName, lpValue: PChar): BOOL; cdecl; external 'msvcrt.dll';
implementation
function GetEnvVarValue(const VarName: string): string;
var
BufSize: Integer; // buffer size required for value
begin
// Get required buffer size (inc. terminal #0)
BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0);
if BufSize > 0 then
begin
// Read env var value into result string
SetLength(Result, BufSize - 1);
GetEnvironmentVariable(PChar(VarName),
PChar(Result), BufSize);
end
else
// No such environment variable
Result := '';
end;
initialization
_putenv_s(PChar('DYLD_LIBRARY_PATH'), PChar('g:\_projekty\ZBar Test\'));
_putenv_s(PChar('MAGICK_CODER_MODULE_PATH'), PChar('g:\_projekty\ZBar Test\modules\coders\'));
s := GetEnvVarValue('DYLD_LIBRARY_PATH');
s := GetEnvVarValue('MAGICK_CODER_MODULE_PATH');
end.
这个单元在 dpr 文件的开头。
【问题讨论】:
-
SetEnvironmentVariable 在失败时返回 Windows 错误代码,您可以通过 GetLastError 获得该错误代码。你得到了什么价值?
-
返回时返回 0
-
@John,听起来是退货的最佳时机,退货时:-)
-
您的代码中有第三方库吗?在您更改环境变量之前,您是否考虑过他们已经读取环境变量的可能性?
-
见鬼,这可能是问题所在......