|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|||||||||||
.NET 4.x Как из DLL на Delphi получить значения15.06.2013, 01:20. Показов 6913. Ответов 50
Метки нет (Все метки)
Измучался! Понятно - не ас, хоть в VB.Net не первый день. Но уже двое суток бьюсь и никак!
Помогите: Есть dll написанная в Delphi (с частями исходников), пытаюсь из неё получать информацию и получаю вечные - "PInvoke не возвращает Variable" или разнообразие типа того... В общем вызываю функции а результат вечно никак... Вот отрывок кода из Delphi:
В общем если не решу - сопьюсь братцы... (и так литров 15 пива выпил в поиске да кучу сайтов (по сиг с каждого) покурил) Пожалейте здоровие мое! PS: На счет маршалить - тут я честно говоря лох. Мож чего не так понимаю. Ясно одно - данные из дельфей приходят пакетом вполне упорядоченной структуры и размером, а как его жевать в VB.NET мне пока непонятно. И есть еще один, для меня пока совсем непонятный тип - PChar (да не, про него я начитался вдоволь, просто непонятно - как его правильно принять из DLL Дельфей в VB.NET, учитывая, что он упакованный) В общем плиз HELP! Заранее ПАСИБО!
0
|
|||||||||||
| 15.06.2013, 01:20 | |
|
Ответы с готовыми решениями:
50
Как подключить dll, написанную на C, к dll на Delphi Есть исходник DLL на Delphi как (и возможно ли) написать похожее на VB.NET и использовать в среде программы написанной на Delphi |
|
Почетный модератор
|
||||||||||||||||
| 15.06.2013, 01:57 | ||||||||||||||||
|
RafStudio, проблема действительно в структуре, она у Вас по размеру получается 8 байт на x86 (16 байт на x64) ОС. Если честно очень лень переводить и проверять на VB.NET, но на C# будет так:
Добавлено через 3 минуты Добавлено через 29 секунд
2
|
||||||||||||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||||||||||||
| 15.06.2013, 12:42 [ТС] | ||||||||||||||||
|
ОГРОМЕННЕЙШЕЕ СПАСИБО!
Все заработало! Использовал все Ваши рекомендации, а за пояснение участков кода и указание на ошибку с Card WORD отдельное спс! Благодаря этому отловил в других функциях свои глупости!Добавлено через 1 час 31 минуту Мда... Столкнулся со структурой посложнее и вновь присел... В существующем исходнике модуля Delphi есть следующие тип и функция его использующие:
При использовании в UnmanagedType вместо ByValArray ByValTStr - ошибка "поля массивов должны составлять пару с ByValArray или с SafeArray" При использовании SafeArray - разбалансировка стека... Боюсь опять встрять на оба выходных с вывихом мозга...
0
|
||||||||||||||||
|
Почетный модератор
|
||||||||||||||||||||
| 15.06.2013, 14:24 | ||||||||||||||||||||
1
|
||||||||||||||||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||
| 15.06.2013, 15:03 [ТС] | ||||||
|
Блин, и вправду - за массив стрингов точно стыдно!!! (Видать пиво прошлых дней сыграло злую шутку)
Главное - ФУНКЦИЯ РАБОТАЕТ! Правда все не тестировал, но факт - с Вашими поправками всё отрабатывает без ошибок! И вновь спасибо огромное за наставления и указания! Однако, думаю и так понятно, что я не очень силен в типах данных, особенно при понимании их в разных языках, а потому пару последних вопросов (ну простите за то, что я не очень углубился в Delphi) Есть еще пара функций в модуле Delphi с которыми у меня как-то не очень... Выкладывать свои промахи в VB.NET, чтобы кто-то посмеялся - опять красный фломастер... Может сразу тыкнете носом как правильно?
Вопрос - Как бы это выглядело в C# (уж и не прошу в VB.NET )Пробовал свое и как ожидалось - ну не очень...
0
|
||||||
|
Почетный модератор
|
|||||||
| 15.06.2013, 15:12 | |||||||
1
|
|||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
| 15.06.2013, 19:14 [ТС] | |
|
Спасибо - пробую...
А на счет понимания ошибки - это прямо в центр! Добавлено через 1 час 8 минут Логин проходит. Все здорово! Разные версии dll от издателя по разному реагируют, однако суть одна - помощь от Вас 100% оказалась просто неоценимой! Нет, это не высокопарные слова! Просто жутко-огромное спасибо за СВОЕВРЕММЕНО БЫСТРУЮ помощь! Надеюсь тему пока не закроют, поскольку наверняка и у меня еще будут вопросы и у таких же мытарей от незнания... Добавлено через 2 часа 37 минут И ЕЩЕ РАЗ СПАСИБО! По сути все победил!!!В ближайшее время выложу обертку-исходник на VB.NET чтобы всем было просто и понятно использование DLL Delphi на VB.NET Просто удивительно, что типа такой проблемы нет!!! Глянешь в Инет - НЕТ ПРОБЛЕМ! - Все живут типа сами по себе! Ну да ладно! Самое время говорить: СПАСИБО ОГРОМНОЕ NickoTin за помощь в адаптации кода, за просто своевременную, размеренную и правильную трёпку по шее из за глупостей и ошибок! Спасибо разработчикам типа UCS, что прячут все от людей и радуют проблемами! Спасибо людям, что задают вопросы мне, от вышеозначенной и задают вопросы людям которые решают проблемы от вышеозначенной и думают как сделать это хоть местами для себя, но в целом для всех и понятно! Спасибо cyberforum.ru за возможность сделать все то, о чем сказано выше! В общем СПАСИБО ВСЕМ! НО ТЕМА ЕЩЕ ОТКРЫТА! - Вопросов по передаче параметров из DLL Delphi в VB.NET я думаю найдется как у меня, так и многих других представителей умершего языка!
3
|
|
|
Почетный модератор
|
||
| 15.06.2013, 19:22 | ||
![]() Вам спасибо за добрые слова ![]() Не по теме: з.ы. Если будет интересно, в разделе C# я писал небольшой faq по маршалингу. Возможно поможет в решении некоторых вопросов.
0
|
||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||
| 15.06.2013, 20:11 [ТС] | ||
|
И еще раз спасибо за своевременность! Добавлено через 35 минут Я просто неправильно выразился = "...так и многих других представителей умершего языка!" имелось в ввиду ЧИТАЙ ИЗУЧАЙ которое (к счастью) не умрет никогда!
1
|
||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|||||||||||
| 17.06.2013, 20:59 [ТС] | |||||||||||
|
И все же проблема ПРИПЕРЛЛАСЬ:
(устал вуалировать изначальность...), в исходнике на Delphi звучит так:
В варианте, с Вашей помощью, звучит так:
Прирост потери по паре байт(символов) - в возвращаемых массивах - на лицо. Мало того, по наблюдениям они увеличиваются в структуре от массива к массиву. Найти решение пока не удалось... Добавлено через 8 минут В общем отловить потерянных два символа/байта пока не удалось...
0
|
|||||||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||
| 17.06.2013, 21:08 [ТС] | ||
|
Ну блин, что еще сказать - ЗАРАБОТАЛО! Можно хоть немного комментариев?!! (понятно - надо больше читать...)
0
|
||
|
Почетный модератор
|
||
| 17.06.2013, 21:14 | ||
|
1
|
||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
| 17.06.2013, 21:17 [ТС] | |
|
Суть понятна - решение выполнено еще в DOS => Просто поддерживается до сих пор в Win...
PS: Имелось ввиду решение владельца DLL с выложенной частью исходника для коннекта... Очередное спасибо! Но все же чуйствую - впереди вопросы по Enumerate...
0
|
|
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||||||||||||
| 18.06.2013, 21:43 [ТС] | ||||||||||||||||
|
Сначала недопонимал, с чем связанны дурацкие возвраты функций относительно значений возвращаемых из структур типа
Сегодня понял - если в Delphi параметр равен например
2
|
||||||||||||||||
| 19.06.2013, 15:43 | |
|
0
|
|
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|||||||||||||||||||||
| 19.06.2013, 21:05 [ТС] | |||||||||||||||||||||
|
Есть одна (для меня пока не критичная) ПРОЦЕДУРА в Delphi, использование которой несколько раз (без разницы в течение какого времени) вызывает "неуправляемую" ошибку "Попытка чтения или записи в защищенную память". "Неуправляемую" - в смысле для меня, поскольку перед её вызовом я вроде обрамляю все в Try-Catch однако при отладке интерпретатор встает! Не столь остро, но всё же вызывает интерес:
Добавлено через 9 минут Не обращайте внимания на запись типа
Добавлено через 5 минут Тьфу, но ведь не может это быть связано с тем, что я из функции вызываю процедуру? Тем более, морда лица приложения говорит о том, что я все же отконнектился от сервера... То есть вызванная процедура была вроде как выполнена...
0
|
|||||||||||||||||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||||||||
| 25.06.2013, 19:24 [ТС] | ||||||||||||
|
После некоторой передышки, ( а точнее - поглощением работой), вновь засел за проект и столкнулся с некоторыми для меня непонятностями.
В Delphi существует функция GetAccountInfo которая заполняет структуру TAccountInfo и прекрасно работает, возвращая данные в VB.NET. Так-же есть функция SetAccountInfo которая по определению сохраняет изменения произведенные в структуре TAccountInfo. (Следует отметить - для чистоты я в принципе ничего не меняю в полученных данных, сразу же вызываю SetAccountInfo) Обращение в Дельфях выглядит так:
Однако в VB.NET константа не может быть структурой! И вот я как-то присел тихо... Почесал тыковку - может через перечисления? Но тут я увы не очень. В общем простота типа:
(Использование EntryPoint:= продиктовано оборачиванием всего этого хозяйства в класс для удобства) Please Help! Добавлено через 42 минуты (Думаю не оффтоп) А вообще - речь идет о весьма серьезном игроке на рынке автоматизации бизнеса - компании UCS. Давно уж собирался с мыслями в эту сторону. Ну вот собственно созрел и начал разработку некоторых модулей уже с учетом запросов пользователей, являющихся клиентами.
0
|
||||||||||||
| 25.06.2013, 19:24 | |
|
Помогаю со студенческими работами здесь
20
Как средствами RTTI получить указатель на ComponentArray[0] или как получить значения некоторых свойств? Как иcследовать DLL написанную на С++, Delphi? Как использовать в Delphi dll из .Net
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|