Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DLL на Delphi / 17 сообщений из 17, страница 1 из 1
27.08.2018, 21:31
    #39693994
AK-Shah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
Уважаемые коллеги! Писал очень давно (еще в середине 90-х годов) на Turbo Pascal, сейчас встала необходимость написать небольшую DLL. Смог разобраться с консольным приложением только на Delphi 6.

Вот код DLL:

Код: 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.
library GetKey;

{$APPTYPE CONSOLE}

uses Windows;

function GetKeyFromSection(var pFileName: PChar; var pSection: PChar): PChar;
var
   LibHandle: HModule;        // описатель библиотеки
   lcBuf: PChar;
   lnSize: Integer;

begin
   lnSize := 512;
   lcBuf := '                               ' + chr(0); 

   LibHandle := LoadLibrary('kernel32.dll');
    if LibHandle <> 0 then
       begin
           GetPrivateProfileString(pSection, nil, '', @lcBuf, lnSize, pFileName);
       end;

    Result := lcBuf;
end;

exports
  GetKeyFromSection;

begin
end.



Библиотека компилируется, только при вызове функции вылетает в Runtime error 216. Подскажите, где еще допущены ошибки.

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
27.08.2018, 21:34
    #39693997
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
...
Рейтинг: 0 / 0
27.08.2018, 21:37
    #39694002
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
AK-Shahгде еще допущены ошибки.

Что значит "ещё"? Там вообще ни одной правильной строчки нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.08.2018, 22:02
    #39694013
AK-Shah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
Dimitry Sibiryakov,

Хорошо, приведите строчки правильные.
...
Рейтинг: 0 / 0
27.08.2018, 22:15
    #39694019
Гирлионайльдо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function strProfile(const aFile, aSection, aEntry, aDefault: string): string;
var
  aTmp: array[0..255] of Char;
begin
  GetPrivateProfileString(PChar(aSection), PChar(aEntry),
    PChar(aDefault), aTmp, Sizeof(aTmp) - 1, PChar(aFile));
  Result := StrPas(aTmp);
end;
...
Рейтинг: 0 / 0
27.08.2018, 22:17
    #39694021
чччД__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
AK-ShahDimitry Sibiryakov,

Хорошо, приведите строчки правильные.
Тебе ссылку дали. Или тоже "языков не знаешь?"
...
Рейтинг: 0 / 0
27.08.2018, 23:03
    #39694033
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
AK-Shah,

Чем класс TIniFile из модуля IniFiles не устроил?

P.S. По ошибкам - см. ShareMem по ссылке, если хочешь стринги в параметрах/результатах фций dll юзать.
...
Рейтинг: 0 / 0
28.08.2018, 23:21
    #39694615
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
AK-ShahDimitry Sibiryakov,

Хорошо, приведите строчки правильные.

Для того, чтобы приводить правильные строчки, надо знать задачу. То, что написано, мало того, что неправильно, оно еще и не нужно, потому что kernel32 импортируется любым исполняемым модулем на Delphi и чтобы вызвать GetPrivateProfileString не надо изобретать дополнительных DLL.
...
Рейтинг: 0 / 0
29.08.2018, 07:05
    #39694643
LocksmithPC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
{$APPTYPE CONSOLE} ?
...
Рейтинг: 0 / 0
29.08.2018, 07:37
    #39694649
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
LocksmithPC{$APPTYPE CONSOLE} ?
"Кому сейчас легко?" - ©.
...
Рейтинг: 0 / 0
29.08.2018, 20:45
    #39695220
AK-Shah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
schi,

авторДля того, чтобы приводить правильные строчки, надо знать задачу. То, что написано, мало того, что неправильно, оно еще и не нужно, потому что kernel32 импортируется любым исполняемым модулем на Delphi и чтобы вызвать GetPrivateProfileString не надо изобретать дополнительных DLL.

Так оно. Собственно, это была попытка решить псевдо-проблему, когда с Visual Foxpro (да-да, на нем пишем клиента, хотя понимаю, что переходить надо на другое - си-шарп, делфи, или java - что-то из этого в наших реалиях. Не передавались параметры, вроде все изрыл, не находил ошибки. Суть - из под APP-менеджера стартовала фокс-программа. Но были проблемы где-то в импорте ДЛЛ-функций. К счастью, это место я нашел (может кому пригодится - обычно ИНИ-файл лежит рядом с ЕХЕ, из фокса путь вычитывался по ТЕКУЩЕМУ каталогу... Но из под Делфи-менеджера-проектов путь при запуске был относительно не ЕХЕ-файла фокса, а ЕХЕ-файла менеджера. Переписали строчку через фоксовую SYS(16) - получить имя запускаемой программы + функция получения полного пути. все взлетело. необходимость в длл действительно отпала. но вспоминать паскаль уже под делфи - только прибавило сил и решимости. К тому же у нас на Делфи большинство проектов, но и без Фокспро пока делать нечего, без нормализации все хранится.

хочется поблагодарить всех тех. кто давал дельные советы и ссылки.

Спасибо, коллеги!
...
Рейтинг: 0 / 0
29.08.2018, 21:00
    #39695223
AK-Shah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
По крайней мере я не согласен с утверждением, что там "все строчки неправильные". Да, согласен, что многие вещи подзабылись, а что-то в Делфи стало по-другому в сравнении с Турбо Паскалем, на котором я и недокументированные функции под Нетварь юзал, и вставки на ассемблере писал. Это было в 90-годы. Много воды утекло с тех пор...
...
Рейтинг: 0 / 0
29.08.2018, 21:15
    #39695225
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
AK-Shahсогласен, что многие вещи подзабылись

Конечно, это ведь так просто: забыть работу с указателями и то, что память под буфера надо
выделять пере использованием.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.08.2018, 23:23
    #39695249
Гирлионайльдо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
Dimitry Sibiryakov,

Он это и сделал

Код: pascal
1.
 lcBuf := '                               ' + chr(0); 




Видишь сколько пробелов поставил. Даже позаботился влепить #0 на конец. Кстати про #0 он не в курсе
...
Рейтинг: 0 / 0
29.08.2018, 23:55
    #39695252
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
Гирлионайльдо
Код: pascal
1.
 lcBuf := ' ' + chr(0); 





Видишь сколько пробелов поставил
На глаз таки меньше 512.
...
Рейтинг: 0 / 0
03.09.2018, 13:35
    #39697164
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
LocksmithPC{$APPTYPE CONSOLE} ?
Для надежности это лучше писать дважды.
...
Рейтинг: 0 / 0
03.09.2018, 13:53
    #39697184
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на Delphi
ну яLocksmithPC{$APPTYPE CONSOLE} ?
Для надежности это лучше писать дважды.
Зачем?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DLL на Delphi / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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