![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Существует приложение типа системы без GUI, в состав которой входят уже несколько прикладных программ, работающих на общих библиотеках dll. Так же в комплекте идёт пакет для разработки, включающий в себя хедеры для Си и файлы сценариев .vb для Бейсик.
Как я понимаю, на основе этой информации, можно при правильном синтаксисе использовать эти функции? Последний раз редактировалось Olstgel, 27.01.2018 в 23:35. |
#2
|
|||
|
|||
![]() ПОнимаешь правильно. просто надо написать правильный импорт функций. Например, как-то так:
Код:
|
#3
|
|||
|
|||
![]() Ну да, вроде так и применяю. Но вот беда - в исходном хедере функция инициализации сервера описана так:
'С# Код:
Мой "сервер" запускается и инициализируется (могу видеть эти процессы), но от своей программы в этот момент получаю краш "Debugger fault notification: access violation at addr=..., write of addr=... . Process stoped". Последний раз редактировалось Olstgel, 27.01.2018 в 23:37. |
#4
|
|||
|
|||
![]() Ну дык правильно крашится, у тебя функция неправильно описана. Должно быть как-то так:
Код:
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Olstgel (18.12.2017)
|
#5
|
|||
|
|||
![]() только не boolean, а BOOL
|
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Olstgel (18.12.2017)
|
#6
|
|||
|
|||
![]() Спасибо! С моим-то опытом даже в голову не пришла мысль.
Последний раз редактировалось Olstgel, 18.12.2017 в 15:15. |
#7
|
|||
|
|||
![]() Вот такой вопрос ещё:
Функция должна передавать версию сервера (5 символов). Код:
а переменная "tmp" приносит только '.1.3'#0#0#0..... По какой причине пропущен первый символ? Эта же функция в бейсике возвращает '6.1.3'. Последний раз редактировалось Olstgel, 27.01.2018 в 23:38. |
#8
|
|||
|
|||
![]() Потому что shortstring не совсем тот тип, который надо использовать. передай туда массив [0..255] of char или что-то подобное. Потом его можно через pchar перевести в нормальную строку.
ЗЫ. В shortstring первый байт занят под длинну строки, вот ты и получаешь что-то неправильное. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Olstgel (31.12.2017)
|
#9
|
|||
|
|||
![]() Да, ключевым решением оказалось объявление tmp [0..255] as char и vtxt как Pchar. Изначально пробовал, но vtxt ума не хватило сразу переопределить.
Странно почему в таблице соответствия типов VB/С/Delphi об этом ни слова. Может не так ищу или читаю. Главное - что с вашими подсказками всё начинает сразу работать. )) Спасибо!! |
#10
|
|||
|
|||
![]() Дело в том, что для паскалевских строк (shortstring) вообще нет аналогов в других языках. Так что по определению надо использовать аналоги PChar или что-то с ним совместимое. Т.е. можно было сразу выделить память под PChar и его передавать в функцию.
|
#11
|
||||
|
||||
![]() И снова у меня затык.
![]() И опять по старым чертежам: пробую в Бейсике - всё работает, перекладываю в Делфи - отваливается. Опишу проблему комментариями в кодах 'VB Код:
'Pas Код:
Даже если я буду передавать Fstep('', '','', '') в таком виде, то по условию сервера мне должен прийти ответ "FILE NOT FOUND" (моделировал ситуацию в Бейсике), а пока что постоянно вижу только "ACCESS DENIED" как в случае, если сервер не инициализирован. Хотя после функции Fstep я продолжаю видеть сервер в состоянии "Ready" Использую Delphi7 , Win_XP_32x. Последний раз редактировалось Olstgel, 03.01.2018 в 00:39. |
#12
|
|||
|
|||
![]() 1. Тебе уже сказали, что String не годится для функции из DLL.
2. ACCESS DENIED это возврат из функции или эксепшн? |
#13
|
|||
|
|||
![]() Цитата:
Передавал и как Pchar - итог одинаков. Кстати некоторые функции у меня всё же работают с типом String. ACCESS DENIED это возврат из функции(внутрисерверный обработчик ошибок). |