1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Вопросы и решения

Тема в разделе "Архив", создана пользователем LexBell, 3 авг 2011.

Статус темы:
Закрыта.
  1. Ветеран R.G. Revenants

    Регистрация:
    19 дек 2011
    Сообщения:
    350
    Симпатии:
    402
    sergey3695, у тебя в дельфи:
    function GetFileWorkingDirectoryFromLink(LinkFileName: string): string;
    а в инно:
    procedure GetFileWorkingDirectoryFromLink(LinkFileName: string); external 'GetFileWorkingDirectoryFromLink@{tmp}\Link.dll stdcall delayload';
    в одной функция, в другой процедура..
    процедура ничего не вернет, тем более не существующая.
     
    sergey3695 нравится это.
  2. Ветеран Проверенный

    Регистрация:
    15 июн 2011
    Сообщения:
    217
    Симпатии:
    67
    2 AVG
    Наверное ты хотел сказать не "передавать", а "возвращать" ?
    Например:
    function GetDriveType(lpRootPathName: string): UINT;
    здесь строка передается.

    А здесь:
    function DriveTypeStr(sDrive: string): string;
    Функция возвращает строку.
     
    sergey3695, AVG и Mailchik нравится это.
  3. AVG AVG

    Ветеран

    Регистрация:
    1 ноя 2011
    Сообщения:
    32
    Симпатии:
    10
    SotM, да спасибо за поправку),спутал
     
    sergey3695 нравится это.
  4. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    Mailchik, это я тут неправильно написал просто. в инно
    Код (Text):
    [Setup]
    AppName=My Program
    AppVerName=My Program v 1.5
    DefaultDirName={pf}\My Program
    OutputDir=.
    Compression=lzma/ultra
    InternalCompressLevel=ultra
    SolidCompression=yes

    [Languages]
    Name: russian; MessagesFile: compiler:Languages\Russian.isl

    [Files]
    Source: Link.dll; DestDir: {tmp}; Flags: dontcopy

    [Code\]
    function InitializeSetup(): Boolean;
    begin
      ExtractTemporaryFile('Link.dll');
      Result:= True;
    end;

    function GetFileWorkingDirectoryFromLink(pszDir: ansistring): ansistring; external 'GetFileWorkingDirectoryLink@Link.dll stdcall delayload';

    procedure InitializeWizard;
    begin
    if GetFileWorkingDirectoryFromLink(ExpandConstant('{userdesktop}\Crysis 2.lnk')) = 'D:\Games\Crysis 2\Setup.exe' then
      DeleteFile(ExpandConstant('{userdesktop}\Crysis 2.lnk'));
    end;
    скрин ошибки выше. в делфи проверял, функция рабочая,а вот в инно не робит.
     
  5. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    707
    Симпатии:
    1.031
    Пол:
    Мужской
    sergey3695
    В коде библиотеки
     
    sergey3695 нравится это.
  6. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    все равно не работает
    скрипт инно
    Код (Text):
    function InitializeSetup(): Boolean;
    begin
      ExtractTemporaryFile('Link.dll');
      Result:= True;
    end;

    function GetFileWorkingDirectoryFromLink(LinkFileName,Dir: string): Bool; external 'GetFileWorkingDirectoryFromLink@Link.dll stdcall delayload';

    procedure InitializeWizard;
    begin
    if GetFileWorkingDirectoryFromLink(ExpandConstant('{userdesktop}\Crysis 2.lnk'),'D:\Games\Crysis 2\Setup.exe') then
      DeleteFile(ExpandConstant('{userdesktop}\Crysis 2.lnk'));
    end;
    скрипт делфи
    Код (Text):
    library Link;

    uses
      ComObj, SysUtils, Windows, ActiveX, System, ShlObj;

    function GetFileWorkingDirectoryFromLink(LinkFileName,Dir: string): Bool; stdcall;
    var
    MyObject: IUnknown;
    MySLink: IShellLink;
    MyPFile: IPersistFile;
    WidePath: array[0..MAX_PATH] of WideChar;
    Buff: array[0..MAX_PATH] of Char;
    begin
    if ( FileExists( LinkFileName ) = false ) then
    begin
    Result := false;
    end else begin
    MyObject := CreateComObject( CLSID_ShellLink );
    MyPFile := MyObject as IPersistFile;
    MySLink := MyObject as IShellLink;
    StringToWideChar( LinkFileName, WidePath, SizeOf( WidePath ) );
    MyPFile.Load( WidePath, STGM_READ );
    MySLink.GetWorkingDirectory( Buff, MAX_PATH );
    if (buff = dir) then
    begin
    Result := True;
    end else begin
    Result := False;
    end;
    end;
    end;

    exports
      GetFileWorkingDirectoryFromLink;

    begin
    end.
     
    Последнее редактирование: 30 апр 2013
  7. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    sergey3695,
    Код (Text):
    function GetFileWorkingDirectoryFromLink(LinkFileName,Dir: string): Bool; external 'DeskTop@[COLOR="Red"]{tmp}\[/COLOR]Link.dll stdcall delayload';
     
    sergey3695 нравится это.
  8. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    David.D.Rocco, о, все заработало. вот это я нубло, ппц. может кто-нибудь фак или ссылки на книжочки по данной тематики подкинет, я б почитал на досуге. Спасибо большое всем тем кто помогал.
     
Статус темы:
Закрыта.

Поделиться этой страницей