powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / перевод приложения на 64 бит
56 сообщений из 56, показаны все 3 страниц
перевод приложения на 64 бит
    #39387599
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по работе необходимо часто просматривать содержимое файлов запросов на сертификат и сертификатов ЭП(электронной подписи).
Написал программу для этого и на основе её плагин для тотал коммандера. Писал на Delphi 7 и дублировал на lazarus. Приложение понятное дело - 32-битное. Ну вот захотелось плагин сделать для 64-битного тотал коммандера. Естественно сразу наткнулся на грабли : приложение скомпилировалось (на lazarus64) но функции cryptoapi перестали работать. По-гуглив, изменил тип используемых переменных dword и cardinal на dword_ptr. Функции cryptoapi заработали. Но немогу решить проблему в этом коде:
На 32 бит работает такое:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
....
type
  PCERT_EXTENSION = ^CERT_EXTENSION;
  CERT_EXTENSION = record
    pszObjId :LPSTR;
    fCritical :BOOL;
    Value :CRYPT_OBJID_BLOB;
  end; 

CERT_EXTENSIONS = array of CERT_EXTENSION; 
....
for i:=0 to pCertContext.pCertInfo.cExtension-1 do
 begin
 showmessage( CERT_EXTENSIONS(pCertContext.pCertInfo.rgExtension)[i].pszObjId);
 end;  


а на 64 бит нет. первый [0].pszObjId элемент массива видит, а при обращении к [1].pszObjId ошибка cannot access memory at address
а обращение к CERT_EXTENSIONS(pCertContext.pCertInfo.rgExtension)[i]. fCritical ошибок не вызывает.
Код: pascal
1.
pszObjId :LPSTR;  LPSTR = Pchar;  

может для 64 бит тут надо другой тип?
немогу найти.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387612
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81может для 64 бит тут надо другой тип?
Сравни Sizeof в 32 и в 64 бита.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387627
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanalexer81может для 64 бит тут надо другой тип?
Сравни Sizeof в 32 и в 64 бита.
да разный
Код: pascal
1.
2.
3.
4.
var h:Pchar;

h:=Pchar('d');
showmessage(h+' '+inttostr(sizeof(h))


32 бит - 4
64 бит - 8
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387634
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81, тебе намекают на неверный размер CERT_EXTENSION из-за ошибочного выравнивания.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387644
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GunSmokeralexer81, тебе намекают на неверный размер CERT_EXTENSION из-за ошибочного выравнивания.
Не понимаю что это означает.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387646
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81GunSmokeralexer81, тебе намекают на неверный размер CERT_EXTENSION из-за ошибочного выравнивания.
Не понимаю что это означает.
Это значит, что нужно сравнить размер
GunSmokerневерный размер CERT_EXTENSION из-за ошибочного выравнивания.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387657
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проверил каждый элемент массива
32 бит - CERT_EXTENSION[i] -16
64 бит - CERT_EXTENSION[i] -28
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387674
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer8132 бит - CERT_EXTENSION[i] -16
64 бит - CERT_EXTENSION[i] -28
Многовато, должно быть на 8 байт больше, а не на 12, потому что только два указателя в структуре.
Код: plaintext
1.
2.
3.
4.
5.
typedef struct _CERT_EXTENSION {
  LPSTR            pszObjId;
  BOOL             fCritical;
  CRYPT_OBJID_BLOB Value;
} CERT_EXTENSION, *PCERT_EXTENSION;


Код: plaintext
1.
2.
3.
4.
typedef struct _CRYPTOAPI_BLOB {
  DWORD cbData;
  BYTE  *pbData;
} CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB;
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387677
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer8164 бит - CERT_EXTENSION[i] -28

Есть мнение, что должно быть 32, ибо 28 на 8 не делится. У тебя выравнивание записей на 4 байта, а должно быть на 8 байт.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387693
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81может для 64 бит тут надо другой тип?
немогу найти.

LPSTR = PAnsiChar;
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387710
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да получается что в pCertContext.pCertInfo.rgExtension не то что надо(или неполностью)
32 бит sizeof(pCertContext.pCertInfo.rgExtension^)=16
64 бит sizeof(pCertContext.pCertInfo.rgExtension^)=28
CertFindExtension тоже не находит расширения
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387787
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
32 бит 64 бит
sizeof(pCertContext^.pCertInfo^.rgExtension^.fCritical) 4 4
sizeof(pCertContext^.pCertInfo^.rgExtension^.pszObjId) 4 8
sizeof(pCertContext^.pCertInfo^.rgExtension^.Value) 8 16

есть мысли где неправильно? и почему?
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387853
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  _CRYPTOAPI_BLOB = record
    cbData: DWORD;
    pbData: LPBYTE;
  end;
  CRYPT_OBJID_BLOB = _CRYPTOAPI_BLOB;


  PCERT_EXTENSION = ^CERT_EXTENSION;
  {$EXTERNALSYM PCERT_EXTENSION}
  _CERT_EXTENSION = record
    pszObjId: LPSTR;
    fCritical: BOOL;
    Value: CRYPT_OBJID_BLOB;
  end;
  CERT_EXTENSION = _CERT_EXTENSION;
  TCertExtension = CERT_EXTENSION;
  PCertExtension = PCERT_EXTENSION;



У меня x32=16, x64=32
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387885
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81,

не работает конкретно в wlx-плагине или в обычном приложении тоже?

сделал тестовое приложение в Lazarus версии 1.6.2, всё нормально работает.

случайно не используете модуль-огрызок Wcrypt2.pas ? В лазарусе имеется JwaWinCrypt.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39387937
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81Не понимаю что это означает.

в таком случае, увы, тебе едва ли стоит САМОМУ заниматься самостоятельным использованием DLL, пока не поймешь.

потому что это стандартная грабля с переносом структур данных между языками, когда компилятор ничего не может проверить и доверяет человеку абсолютно. И тут тебе повезло, что ошибка была такая грубая, что программа мгновенно вылетела. А если бы ошибка была тоньше, то она могла бы внешне не проявиться и только втихую портить данные, несколько месяцев или лет....

-------------

Как вариант, для Delphi есть JEDI Win API Translation and Crypto API Library

К сожалению, проект полузаброшенный, поэтому разобраться какую версию ставить ( 2.3 / 2.4. , с сайта или с SVN ) можно только методом тыка. Тупо включаешь эти модули в проект - и они не компилируются.

Но простейшие WinXP+ Crypto функции в Delphi XE2 Win32 работают. Когда заставишь скомпилироваться.
Это тем более удобно, что ЕМНИП в разных версиях Windows функции расположены в разных DLL.

Но я не пробовал её в Delphi x64 и не знаю, насколько оно совместимо.
А если совместимо с Delphi x64 - ещё не факт что с ней совместим будет FPC x64

И всё же - попробовать использовать уже сделанное - вполне себе вариант.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388129
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writeralexer81,

не работает конкретно в wlx-плагине или в обычном приложении тоже?

сделал тестовое приложение в Lazarus версии 1.6.2, всё нормально работает.

случайно не используете модуль-огрызок Wcrypt2.pas ? В лазарусе имеется JwaWinCrypt.
да пилю напильником Wcrypt2.pas.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388134
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
к сожалению те примеры которые попадались не работали c JwaWinCrypt. и я закопался в Wcrypt2
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388139
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81к сожалению те примеры которые попадались не работали c JwaWinCrypt. и я закопался в Wcrypt2

alexer81,
Потрать немного времени и вернись лучше обратно на JwaWinCrypt.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388573
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sql2012alexer81к сожалению те примеры которые попадались не работали c JwaWinCrypt. и я закопался в Wcrypt2

alexer81,
Потрать немного времени и вернись лучше обратно на JwaWinCrypt.
да действительно lazarus 1.6.2 c использованием JwaWinCrypt код работает нормально.
а вот времени придется потратить много чтобы перейти на JwaWinCrypt.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388591
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81, Ghost Writer

Ребят, а не поделитесь кодом для wlx-plugina в Lazarus под Win64?

Интересует пример инициализации LCL и последующего создания экземпляра формы именно для 64 бит.

Уже долго мучаюсь - не могу собрать wlx-plugin для 64-х битного TotalCommander-а.
Для 32-х битного TotalCommander-а работает пример из сети, а на 64 - падает.

Вот мой код

проект:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
library myplugin;

{$mode objfpc}{$H+}
{$message warn 'Check OriginalFilename into version info in project options'}

uses
  // this includes the LCL widgetset
  Interfaces,
  Forms,
  SysUtils,
  Windows,
  // project
  ufmMain;

const
  cDetectStringCmd = 'EXT="TEST" | EXT="TES" | EXT="TST"';
  cDetectStringExt = '.TEST.TES.TST';

procedure ListGetDetectString(DetectString: PChar; MaxLen: Integer); stdcall;
begin
  StrLCopy(DetectString, PChar(cDetectStringCmd), MaxLen);
end;

function FileExtIsFits(FileToLoad: PChar): Boolean;
var
  Ext: string;
begin
  Result := False;
  Ext := ExtractFileExt(string(FileToLoad));
  Ext := UpperCase(Ext);
  Result := (Pos(Ext, cDetectStringExt) > 0);
end;

function ListLoad(ListerWin: HWND; FileToLoad: PChar; ShowFlags: Integer): HWND; stdcall;
begin
  if FileExtIsFits(FileToLoad) then
    Result := TfmMain.PluginShow(ListerWin, string(FileToLoad))
  else
    Result := 0;
end;

function ListLoadNext(ListerWin, PluginWin: HWND; FileToLoad: PChar; ShowFlags: Integer): Integer; stdcall;
begin
  if FileExtIsFits(FileToLoad) then
    Result := TfmMain.PluginShowNext(PluginWin, string(FileToLoad))
  else
    Result := 0;
end;

procedure ListCloseWindow(PluginWin: HWND); stdcall;
begin
  TfmMain.PluginHide(PluginWin);
end;

{ Exprot }

exports
 ListGetDetectString,
 ListLoad,
 ListLoadNext,
 ListCloseWindow;

{$R *.res}

begin
  Application.Initialize;
end.



форма:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
  TfmMain = class(TForm)
  private
    FTotCmdWin: HWND;    // handle of TotalCommander window
    FParentWin: HWND;    // handle of Lister window
    FQuickView: Boolean; // Ctrl+Q panel
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    constructor CreateParented(AParentWindow: HWND);
  public
    class function PluginShow(ListerWin: HWND; FileToLoad: string): HWND;
    class function PluginShowNext(PluginWin: HWND; FileToLoad: string): Integer;
    class function PluginHide(PluginWin: HWND): HWND;
  end;

implementation

{$R *.lfm}

{ TfmMain }

class function TfmMain.PluginShow(ListerWin: HWND; FileToLoad: string): HWND;
var
  fmMain: TfmMain;
begin
  fmMain := nil;
  try
    fmMain := TfmMain.CreateParented(ListerWin);
    fmMain.Label1.Caption := FileToLoad;
    fmMain.Show;
    SetWindowLong(fmMain.Handle, GWL_USERDATA, PtrInt(fmMain));
    // set focus to our window
    if not fmMain.FQuickView then
    begin
      PostMessage(fmMain.Handle, WM_SETFOCUS, 0, 0);
      fmMain.SetFocus;
    end;
    Result := fmMain.Handle;
  except
    if Assigned(fmMain) then
      fmMain.Free;
    Result := 0;
  end;
end;

class function TfmMain.PluginShowNext(PluginWin: HWND; FileToLoad: string): Integer;
var
  fmMain: TfmMain;
begin
  fmMain := TfmMain(GetWindowLong(PluginWin, GWL_USERDATA));
  try
    fmMain.Label1.Caption := FileToLoad;
    fmMain.Show;
    Result := 0;
  except
    Result := 1;
  end;
end;

class function TfmMain.PluginHide(PluginWin: HWND): HWND;
var
  fmMain: TfmMain;
begin
  Result := 0;
  fmMain := TfmMain(GetWindowLong(PluginWin, GWL_USERDATA));
  try
    fmMain.Free;
  except
  end;
end;

procedure TfmMain.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := (WS_CHILD or WS_MAXIMIZE) and not WS_CAPTION and not WS_BORDER;
  Params.WindowClass.cbWndExtra := SizeOf(PtrInt); // ~4/8 bytes for form
end;

constructor TfmMain.CreateParented(AParentWindow: HWND);
begin
  inherited CreateParented(AParentWindow);
  FTotCmdWin  := FindWindow('TTOTAL_CMD', nil);
  FParentWin  := AParentWindow;
  FQuickView  := Windows.GetParent(FParentWin) <> 0;
end;

...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388650
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wlx-plugin
Код: pascal
1.
DetectString: PChar



нет такого типа!

есть PAnsiChar, есть PWideChar

в общем - надо смотреть документацию, в какой конкретно кодировке приходят и уходят эти строки

ЕМНИП в FPC нынешнем строки вообще UTF-8, то есть не сопадают ни с одним из вариантов string/char/pchar в Deдphi
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388756
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81Ghost Writeralexer81,

не работает конкретно в wlx-плагине или в обычном приложении тоже?

сделал тестовое приложение в Lazarus версии 1.6.2, всё нормально работает.

случайно не используете модуль-огрызок Wcrypt2.pas ? В лазарусе имеется JwaWinCrypt.
да пилю напильником Wcrypt2.pas.напильник драчевый ?
попробовал подкинуть Wcrypt2.pas в лазарус - 70 ворнингов типа Wcrypt2.pas(8441,1) Warning: Comment level 3 found и fatal error
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388763
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот морока теперь..
есть системный(или как это называется незнаю) тип TFileTime(описан в Struct.inc) и в JwaWinType зачем-то определен TFileTime. компилятор говорит что это не одно и тоже.
А я ранее преобразовывал дату через FileTimeToSystemTime

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function FileTimeToSTRTime(ft:_FILETIME):string;
var TZ              : TTimeZoneInformation;
    systemTime      : TSYSTEMTIME;
 begin
GetTimeZoneInformation(TZ);
 FileTimeToSystemTime(ft, systemTime);
 SystemTimeToTzSpecificLocalTime(@TZ,systemTime,systemTime);
 Result:=FormatDateTime('dd.mm.yyyy hh:mm:ss', SystemTimeToDateTime(SystemTime));
end; 


FileTimeToSystemTime нужен TFileTime из в Struct.inc
а у меня есть pCertContext^.pCertInfo^.NotBefore - TFileTime из JwaWinType
как их состыковать?
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388766
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторнапильник драчевый ?
попробовал подкинуть Wcrypt2.pas в лазарус - 70 ворнингов типа Wcrypt2.pas(8441,1) Warning: Comment level 3 found и fatal error
я им с 2012 пользуюсь. и за это время многое подправил и добавил. на 32 бита прекрасно всё работало. Один модуль для Delphi7 и Lazarusa
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388770
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81,

вместо модуля Windows подключи JwaWindows
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388772
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с модулем Windows тоже можно таким способом:
Код: pascal
1.
FileTimeToSTRTime(FILETIME(Context^.pCertInfo^.NotBefore))
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388773
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writeralexer81,

вместо модуля Windows подключи JwaWindows
спасибо за наводку. нужно было Windows совсем убрать.
а в JwaWindows есть тоже свой Tfiletime и он недружит с JwaWinType.Tfiletime
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388775
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда FILETIME(Context^.pCertInfo^.NotBefore)
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388782
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо с FILETIME разобрался. всё работает. переход JwaWinCrypt завершен :) (почти)

в JwaWinCrypt CryptStringToBinary описан так :

Код: pascal
1.
2.
3.
function CryptStringToBinary(pszString: LPCSTR; cchString: DWORD;
  dwFlags: DWORD; ppBinary: BYTE; var ppcbBinary: DWORD;
  ppdwSkip: DWORD): BOOL; stdcall; 



а в wincrypt2 в соответствии с описанием MS

Код: pascal
1.
2.
function CryptStringToBinary(pszString: PChar; cchString: dword; dwFlags: dword;
pbBinary: pointer; var pcbBinary: dword; var pdwSkip: dword; var pdwFlags: dword): boolean; stdcall; 



как же тогда тут узнать размер ppcbBinary если ppBinary не указатель? надо же первые раз сделать вызов:

Код: pascal
1.
CryptStringToBinary(pchar(Data), Length(Data), Flags, nil, sz, skip);
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388797
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexer81как же тогда тут узнать размер ppcbBinary если ppBinary не указатель?
ppcbBinary - это и есть размер.
но мне не понятно куда делся 7-й параметр pdwFlags, который возвращает информацию из какого формата был файл перекодирован.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388798
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
компилируется, но при запуске
---------------------------
Точка входа в процедуру CryptToStringBinaryA не найдена в библиотеке DLL crypt32.dll.
---------------------------
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39388799
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сверху даже комментарий. джедаи про него забыли ))
Код: pascal
1.
// *pdwFlags returns the actual format used in the conversion, optional   
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39389354
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написал в своём модуле так :
Код: pascal
1.
2.
function CryptStringToBinary(pszString: LPCSTR; cchString: dword; dwFlags: dword;pbBinary: pointer;
                             var pcbBinary: dword; var pdwSkip: dword;var pdwFlags: dword): boolean; stdcall;    


работает.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39389357
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня есть сборник win32api от JEDI там файлы 2001-2002 г.г. так там в JwaWinCrypt вообще нет этой функции
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39389374
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81,

Извините, что не в тему.
Так все-таки Ваша разработка - это именно wlx-плагин ?
Если да, и вы используете LCL, то не затруднит ли Вас показать код инициализации формы плагина для 64-х битного TotalCommandera?
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39389387
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wlx-pluginalexer81,

Извините, что не в тему.
Так все-таки Ваша разработка - это именно wlx-плагин ?
Если да, и вы используете LCL, то не затруднит ли Вас показать код инициализации формы плагина для 64-х битного TotalCommandera?
плагин у меня есть написаный на дельфи7. на лазарус перевожу только из-за поддержки 64 бит.
как что получится сообщу вам.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39389393
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81плагин у меня есть написаный на дельфи7. на лазарус перевожу только из-за поддержки 64 бит.
как что получится сообщу вам.

Спасибо, с интересом буду ждать.

Насколько я знаю Гислер (автор TotalCommander) в своих плагинах LCL не использовал: http://www.ghisler.ch/board/viewtopic.php?t=36164&highlight=wlx lazarus&sid=7e615a020cdbde2b25014fa8de79e3f7
Но это сообщение из 2013-го...

Нужен "hello word" для современных версий.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39389995
O'Rioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81у меня есть сборник win32api от JEDI там файлы 2001-2002 г.г. так там в JwaWinCrypt вообще нет этой функции

а что, в 2002 году уже вышла Windows Vista ?
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39390006
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O'Riochа что, в 2002 году уже вышла Windows Vista ?а причем тут Vista? на XP уже была.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39390333
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wlx-plugin,
по поводу плагина.
Дельфийский код оказался несовместимым использовал твой.
на 32 бит работает но плагин не встраивается в lister - выглядит как дочерним окном внутри listera. пока не найду где что исправить.
на 64 бит открывает файл показывает информацию и сразу вываливается ошибка
автор---------------------------
Total Commander 9.0a
---------------------------
Access violation.
Access violation
Windows 7 SP1 6.1 (Build 7601), base: 0400000

Please report this error to the Author, with a description
of what you were doing when this error occurred!

Stack trace (x64):40A700
4312C2 43E721 43E436 44040C 440881 78CDCC 440827 404895

Press Ctrl+C to copy this report!
Continue execution?
---------------------------
Да Нет
---------------------------
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39390341
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81wlx-plugin,
по поводу плагина.
Дельфийский код оказался несовместимым использовал твой.
на 32 бит работает но плагин не встраивается в lister - выглядит как дочерним окном внутри listera. пока не найду где что исправить.
на 64 бит открывает файл показывает информацию и сразу вываливается ошибка
автор---------------------------
Total Commander 9.0a
---------------------------
Access violation.
Access violation
Windows 7 SP1 6.1 (Build 7601), base: 0400000

Please report this error to the Author, with a description
of what you were doing when this error occurred!

Stack trace (x64):40A700
4312C2 43E721 43E436 44040C 440881 78CDCC 440827 404895

Press Ctrl+C to copy this report!
Continue execution?
---------------------------
Да Нет
---------------------------


Так в том то и беда, что для 64-х бит ломается...
Сама идея использования формы (т.е. LCL) в dll плохая...

Для 32-х бит у формы Border := bsNone нужно поставить.

А что новые версии Delphi не умеют 64 bit?
Почему бы в эту сторону не посмотреть?
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39390386
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wlx-pluginДля 32-х бит у формы Border := bsNone нужно поставить.

а в дельфи и без этого обходилось

wlx-pluginСама идея использования формы (т.е. LCL) в dll плохая...

ранее часто использовал незнаю что в этом плохого.

wlx-pluginА что новые версии Delphi не умеют 64 bit?
Почему бы в эту сторону не посмотреть?

какую версию и где её взять?
вот диск с дельфи7 я купил за 70 р. на книжном рынке в 2002 г.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39390391
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81какую версию и где её взять?
вот диск с дельфи7 я купил за 70 р. на книжном рынке в 2002 г.

https://www.embarcadero.com/ru/products/delphi/starter/promotional-download
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39390833
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wlx-pluginalexer81какую версию и где её взять?
вот диск с дельфи7 я купил за 70 р. на книжном рынке в 2002 г.

https://www.embarcadero.com/ru/products/delphi/starter/promotional-download

А нет, этот starter не поддерживает 64bit: https://www.embarcadero.com/products/delphi/product-editions

Вот блин, думал таки можно и легально, и бесплатно... но нет...
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39393302
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81,

Да, кстати, этот код работает для 64-х битного Double Commander.
Проблема именно с Total Commander 64bit
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39395153
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wlx-pluginalexer81,

Да, кстати, этот код работает для 64-х битного Double Commander.
Проблема именно с Total Commander 64bit
да работает без ошибок. ну что же придется замещать импорт ))
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39395253
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81...
да работает без ошибок. ну что же придется замещать импорт ))

Что значит "замещать импорт" ?
Т.е. Вы оставляете поиски решения для TotalCommander 64bit?
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39396481
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wlx-pluginalexer81...
да работает без ошибок. ну что же придется замещать импорт ))

Что значит "замещать импорт" ?
Т.е. Вы оставляете поиски решения для TotalCommander 64bit?
ну решение пока такое: delphi xe 7.
известный пример плагина wlx Листер плагин на Borland Delphi 7 для начинающих
на основе его и свой делал. работает без ошибок и под 32 и под 64.
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39404176
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оказывается что ошибка
автор---------------------------
Total Commander 9.0a
---------------------------
Access violation.
Access violation
Windows 7 SP1 6.1 (Build 7601), base: 0400000

Please report this error to the Author, with a description
of what you were doing when this error occurred!

Stack trace (x64):40A700
4312C2 43E721 43E436 44040C 440881 78CDCC 440827 404895

Press Ctrl+C to copy this report!
Continue execution?
---------------------------
Да Нет
---------------------------
вылетает после того как курсор мышки начинает шевелится над плагином
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39404181
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. если курсор отвести в сторону от тотала. то ошибка не появится, и тотал и запущенный плагин будут работать нормально.закрываться без ошибок. пока курсор мыши не появится над окном плагина
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39404205
wlx-plugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexer81т.е. если курсор отвести в сторону от тотала. то ошибка не появится, и тотал и запущенный плагин будут работать нормально.закрываться без ошибок. пока курсор мыши не появится над окном плагина

Да, все так.

Но это, так сказать, только одно из проявлений ошибки - сообщение WM_NCHITTEST.

У меня, например, также все валится при вызове метода:

Код: pascal
1.
MyPanel.ManualDock(NewMyPanel);



Кроме того на 64 битах есть проблемы (AV) c якорями.
И это уже в приложение, а не в плагине.

Вообщем, у меня пока ощущение что для Win64 в Lazarus еще много багов...
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39410937
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот Гислер в listplughelp2.1 пишет
авторWindows messages below WM_USER are not passed to the windows procedure. -> Use SetWindowLongPtr to subclass the window
и что в связи с этим надо изменить в коде?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
перевод приложения на 64 бит
    #39623838
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пересел на другой комп. работаю в delphi XE7 при подключении JwaWinCrypt (хоть к пустому проекту) под 32 компилится без ошибок, а под 64 ругается на
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function InterlockedExchangePointer(var Target: PVOID; Value: PVOID): PVOID;
begin
{$ifdef CPU64}
  Result := PVOID(InterlockedExchange64(LONGLONG(Target), LONGLONG(Value)));
{$else}
 [color=red] Result := PVOID(InterlockedExchange(LONG(Target), LONG(Value)));[/color]
{$endif CPU64}
end;


пишет
[dcc64 Error] JwaWinBase.pas(6355): E2197 Constant object cannot be passed as var parameter
и такая же ругня на
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function InterlockedCompareExchangePointer(var Destination: PVOID; Exchange, Comperand: PVOID): PVOID;
begin
{$ifdef CPU64}
  Result := PVOID(InterlockedCompareExchange64(LONGLONG(Destination),
              LONGLONG(Exchange), LONGLONG(Comperand)));
{$else CPU64}
 [color=red] Result := PVOID(InterlockedCompareExchange(LONG(Destination),
    LONG(Exchange), LONG(Comperand)));[/color]
{$endif CPU64}
end;


глянул прошлый раз я эти строки просто закомментировал. может по-правильному надо по-другому исправить?
в лазарусе код выглядит также и не ругается
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39624137
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменить
alexer81
Код: pascal
1.
{$ifdef CPU64}

на
Код: pascal
1.
{$ifdef CPUX64}
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39627048
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, Спасибо!
...
Рейтинг: 0 / 0
перевод приложения на 64 бит
    #39725958
alexer81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по поводу wlx-plugina в Lazarus под tcmd64.
решилось заменой:
GetWindowLong -> GetWindowLongptr
и SetWindowLong(fmMain.Handle, GWL_USERDATA, PtrInt(fmMain));
на
SetWindowLong(Widgetset.AppHandle, GWL_USERDATA, PtrInt(fmMain));
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / перевод приложения на 64 бит
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]