Lazarus 1.6.4 и библиотеки ВербаOW

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение vitaly_l »

gvido писал(а):С 1.4.4 ни один вариант не дает корректного результата

Код: Выделить всё

var 
s,k:WideString ;
с,cc:PChar;
begin
k:='';
cc := nil;
s := "F:\";
c := addr(s[0]);// S[1];
err_code:=InitKey(c,cc); // err_code:=InitKey(@c,@cc);

// или вот так?
err_code:=InitKey(PChar(s),PChar(k));
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение serbod »

gvido, действительно, ерунда получается. Я бы на вашем месте написал об этом в багтрекер. Только нужен простой компилируемый пример.

А зачем вам именно array of char, почему бы не использовать String? Он же должен в PChar без проблем конвертироваться. Или AnsiString и PAnsiString.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение SSerge »

я бы при такой безнадёге получил ассемблерный листинг последнего работающего варианта и первого неработающего и попытался сравнить с целью увидеть разницу. :?
gvido
постоялец
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение gvido »

serbod писал(а):gvido, действительно, ерунда получается. Я бы на вашем месте написал об этом в багтрекер. Только нужен простой компилируемый пример.

А зачем вам именно array of char, почему бы не использовать String? Он же должен в PChar без проблем конвертироваться. Или AnsiString и PAnsiString.

Это уже крик души просто.
Начиналось то с простого присвоения строки с приведением к pchar - err_code:=InitKey(Pchar('F:'),'');
И ведь работало же без проблем!!!!
Переменную - массив символов сделал уже потом, в надежде, что там то точно ничего не должно преобразовываться.
И ладно бы в строки были нестандартные символы...
Возможно есть какой-то сдвиг по адресу при передаче pchar. Знать бы точно как обрабатывается(проверяется) внутри функции передаваемый key_dev!?!?
Предполагаю, что тупо подставляется в путь для чтения этого самого GK.DB3.

Добавлено спустя 1 минуту 47 секунд:
SSerge писал(а):я бы при такой безнадёге получил ассемблерный листинг последнего работающего варианта и первого неработающего и попытался сравнить с целью увидеть разницу. :?

А, это вариант!!!
sts
энтузиаст
Сообщения: 519
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение sts »

да враппер с темже интерфейсом функции запилили бы уже и посмотрели что передается.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение vitaly_l »

gvido писал(а):И ладно бы в строки были нестандартные символы

Вот хрен его знает как оно там начиная с версии 3:0 перекодирует.
Можно ещё так извернуться, несмотря на 100%-ю латиницу в строке.

Код: Выделить всё

 
s,k:string;
begin
  k := '';
  s := 'F:\';
  err_code:=InitKey(PChar(UTF8ToWinCP(s)),PChar(UTF8ToWinCP(s)));

А вообще, у меня в других функциях PChar при обращении к внешней библиотеке 100% работает.
Соответственно - это 100% не в PChar дело.

Если ассемблерный листинг не поможет, то:
проверьте программу на утечку памяти (если проверка постоянно не включена).

.
gvido
постоялец
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение gvido »

Чет у меня уже мозг взорвался....
Кто может сравнить ехе
1_4_2_nVBC.exe - работает https://yadi.sk/d/3IhQapHu3Lt4kK
1_4_4_nVBC.exe - не работает https://yadi.sk/d/oLnG0aCX3Lt4u4
код проще не придумаешь:

Код: Выделить всё

procedure TForm1.BLoadKeyClick(Sender: TObject);
var
  err_code: integer;
begin
err_code:=InitKey(Pchar('F:\'),Pchar(''));
label1.Caption:=GetVerbaErrorStr(err_code);
end;

Если надо могу проект скинуть - там нет ничего секретного.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение vitaly_l »

gvido писал(а):err_code:=InitKey(Pchar('F:\'),Pchar(''));

Pchar('F:\') <== вот так точно работать не будет.
gvido
постоялец
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение gvido »

vitaly_l писал(а):Если ассемблерный листинг не поможет, то:
проверьте программу на утечку памяти (если проверка постоянно не включена).

Вот что поймал с проверками:
https://yadi.sk/i/4KrqbwCF3Lt65t

Добавлено спустя 51 секунду:
vitaly_l писал(а):Pchar('F:\') <== вот так точно работать не будет.

В 1.4.2 работает на УРА!!!
И этот код проверил за эти дни с версии 1.0.14 по 1.4.2 включительно работает!!!
Начиная с 1.4.4 не работает никак вообще. При сборке нет ни ошибок не предупреждений.
Последний раз редактировалось gvido 10.08.2017 17:39:04, всего редактировалось 1 раз.
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение serbod »

vitaly_l писал(а):Pchar('F:\') <== вот так точно работать не будет.

Это почему? Для констант приведение к PChar не обязательно, но должно ведь работать.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение vitaly_l »

serbod писал(а):Это почему? Для констант приведение к PChar не обязательно, но должно ведь работать.

А куда адрес-то? В память выделенную программе? Туда, вообще-то адрес давать и брать - низяаа ...
gvido писал(а):Вот что поймал с проверками:
https://yadi.sk/i/4KrqbwCF3Lt65t

Кидайте код с тестовым проектом, дальше уже не мой уровень, нужен кто-то из "взрослых" программистов.

.
gvido
постоялец
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение gvido »

sts писал(а):да враппер с темже интерфейсом функции запилили бы уже и посмотрели что передается.

То есть таки dll свою с выводом входящих параметров на том же С?
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение serbod »

vitaly_l писал(а):А куда адрес-то? В память выделенную программе? Туда, вообще-то адрес давать и брать - низяаа ...

Внешняя DLL работает в одном адресном пространстве с основным приложением. Константы в DLL передавать вообще не проблема. Могут быть проблемы с передачей в DLL короткоживущих строк, но это как-то решается компилятором. Вся WinAPI так работает.
gvido
постоялец
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение gvido »

vitaly_l писал(а):Кидайте код с тестовым проектом, дальше уже не мой уровень, нужен кто-то из "взрослых" программистов.

Вот проект:
https://yadi.sk/d/KfAMfm453Lt7yF


Упс.. там в коде куча мусора закомментировано. Ну это чтоб не забыть что уже и как пробовал.....
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Lazarus 1.6.4 и библиотеки ВербаOW

Сообщение Лекс Айрин »

vitaly_l писал(а):А куда адрес-то? В память выделенную программе? Туда, вообще-то адрес давать и брать - низяаа ...

выделяется в куче адрес, а потом по нему выкладывается строка. Вполне легитимное присваивание.
Ответить