Вернуть путь к библиотеке конкретной платформы, используя OTA

Я хочу получить путь к библиотеке для конкретной платформы (win32, win64, OSx). Но когда я спрашиваю путь к библиотеке, OTA просто возвращает мне путь к библиотеке OSx.

Код является:

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, win64, OSx). Но так как я просто могу назвать значение ключа для его имени, он всегда возвращает мне первый ключ, который он находит, в моем случае это OS X.

1 ответ

Я не приму мой ответ как правильный, это просто вариант. Я не нашел возможности сделать это напрямую в 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;
Другие вопросы по тегам