Delphi 使用OTA返回特定平台的库路径
我想获取特定平台(win32、win32、OSx)的库路径。 但是,当我询问OTA的库路径时,只需返回OSx库路径即可 代码是:Delphi 使用OTA返回特定平台的库路径,delphi,toolsapi,otapi,Delphi,Toolsapi,Otapi,我想获取特定平台(win32、win32、OSx)的库路径。 但是,当我询问OTA的库路径时,只需返回OSx库路径即可 代码是: EnvironmentOptions := (BorlandIDEServices as IOTAServices).GetEnvironmentOptions; Paths.Text := EnvironmentOptions.Values['LibraryPath']; 我注意到一件奇怪的事。当我询问键值时,我得到3个LibraryPath 当我这样做时: En
EnvironmentOptions := (BorlandIDEServices as IOTAServices).GetEnvironmentOptions;
Paths.Text := EnvironmentOptions.Values['LibraryPath'];
我注意到一件奇怪的事。当我询问键值时,我得到3个LibraryPath
当我这样做时:
EnvironmentOptions.GetOptionNames
我得到:
... A lot of values
'ClassCompletionBooleanAddInterface', tkEnumeration
'LibraryPath', tkLString --> 1
'PackageDPLOutput', tkLString
... lot of values
'LibraryPath', tkLString --> 2
'PackageDPLOutput', tkLString
... lot of values
'HPPOutputDirectory', tkLString
'LibraryPath', tkLString --> 3
'PackageDPLOutput', tkLString
... lot of values
我认为每个键必须代表我拥有的一个可能的目标(win32、win32、OSx)。但是,由于我可以调用键的值作为它的名称,它总是返回它找到的第一个键,在我的情况下,它是OS X。我不会接受我的答案是正确的,这只是一个选项。我没有找到直接在OTA中进行的可能性,因此我在注册表中查找:
procedure GetLibraryPath(Paths: TStrings; PlatformName: string);
var
Svcs: IOTAServices;
Options: IOTAEnvironmentOptions;
Text: string;
List: TStrings;
ValueCompiler: string;
RegRead: TRegistry;
begin
Svcs := BorlandIDEServices as IOTAServices;
if not Assigned(Svcs) then Exit;
Options := Svcs.GetEnvironmentOptions;
if not Assigned(Options) then Exit;
ValueCompiler := Svcs.GetBaseRegistryKey;
RegRead := TRegistry.Create;
List := TStringList.Create;
try
if PlatformName = '' then
Text := Options.GetOptionValue('LibraryPath')
else
begin
RegRead.RootKey := HKEY_CURRENT_USER;
RegRead.OpenKey(ValueCompiler + '\Library\' + PlatformName, False);
Text := RegRead.GetDataAsString('Search Path');
end;
List.Text := StringReplace(Text, ';', #13#10, [rfReplaceAll]);
Paths.AddStrings(List);
if PlatformName = '' then
Text := Options.GetOptionValue('BrowsingPath')
else
begin
RegRead.RootKey := HKEY_CURRENT_USER;
RegRead.OpenKey(ValueCompiler + '\Library\' + PlatformName, False);
Text := RegRead.GetDataAsString('Browsing Path');
end;
List.Text := StringReplace(Text, ';', #13#10, [rfReplaceAll]);
Paths.AddStrings(List);
finally
RegRead.Free;
List.Free;
end;
end;
我添加了otapi和toolsapi标记。我认为这些标签可以合并,但我没有足够的分数(在这些标签上)来提出建议。这很奇怪:)谢谢你,有用吗?哦,谢谢你的
GetBaseRegistryKey
。我不知道这个,它在我正在编写的一段代码中很有用。非常方便。然后你就可以自己找到答案了。非常好!这可能是获得所需值的唯一方法。六羟甲基三聚氰胺六甲醚。。。IOTAEnvironmentOptions.Values[]
返回重复的键是不好的。对于不同的平台,它们应该有不同的名称,例如,“LibraryPathMacOS”
,等等。FWIW,我在质量门户网站上报告过:。我在我的10.1 Berlin Architect中发现了7组重复密钥。