|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|||||||||||
.NET 4.x Как из DLL на Delphi получить значения15.06.2013, 01:20. Показов 7137. Ответов 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 |
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
| 25.06.2013, 21:41 [ТС] | |
|
Ну я поражен... Простая проверка - вроде как пошло. Но вот ведь только недавно пробовал менять ByVal на ByRef и не очень работало... Я еще перепроверю по изменениям остальных элементов структуры!
Но пошло ведь!!! Ну прям китайская грамота - как хотишь так понимай. То работает, а то (если не работает) и снизу вверх читай!
0
|
|
|
Почетный модератор
|
|
| 25.06.2013, 21:50 | |
|
Т.к. TAccountInfo это структура, то передавать её по значению с const параметром просто неразумно, поэтому остается только один вариант: передается ссылка на объект, но изменить объект с использованием этой ссылки функция SetAccountInfo не сможет (это должен контролировать компилятор Delphi или какой-то сервис на более ранних стадиях, хз какие у него там анализаторы кода и т.п. используются). Как-то так, других мыслей у меня нет...
2
|
|
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||
| 26.06.2013, 18:43 [ТС] | ||||||
|
Ну млиин... Проверил еще пару передаваемых значений - ВСЕ РАБОТАЕТ!
Даже не знаю - как же так получалось ранее, что не работало! То ли форум хорош, то ли NickoTin так благотворительно воздействует!!! ОДНАКО ОБЕЩАЮ ОДНО - ВОПРОСОВ ЕЩЕ ОЧ МНОГО! Добавлено через 1 час 14 минут Ну и хорошо, что про "компилятор делфи" все молчат - суть вопроса РАЗОБРАТЬСЯ Добавлено через 2 минуты СПБо очередной раз! Добавлено через 19 часов 26 минут Столкнулся с такими конструкциями и не могу понять - каким образом их реализовать в VB.NET?
0
|
||||||
|
Почетный модератор
|
|||||||||||
| 26.06.2013, 19:47 | |||||||||||
2
|
|||||||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||
| 27.06.2013, 18:06 [ТС] | ||||||
|
(Долбаные электрики - второй день как к компьютеру не подступиться)
Как уже говорил - с такой конструкцией даже в VB.NET не сталкивался, не то что в Delphi В общем код для одной из функций у меня вышел таким:
К ней претензий нет. Однако вызов "Вызывалки" возвращает в [COLOR="rgb(65, 105, 225)"]CscLink.LastMsg[/COLOR] ошибку из внешней DLL типа: "Access violation at address 00000000. Read of address 00000000" Вобще, как бы понимаю, что скорее всего инициализировать Info следовало бы как Dim Info As New EnumAccountsCallback Если так, то подскажите - как правильно использовать в таком случае AddressOf
0
|
||||||
|
Почетный модератор
|
||||||||||||
| 27.06.2013, 19:04 | ||||||||||||
|
Да, про пример забыл, писал на работе...
0
|
||||||||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|||||||
| 27.06.2013, 19:27 [ТС] | |||||||
|
Спасибо за потраченное время!
Несколько замешкался:
А самое печальное для меня - эт сколько ж я еще не знаю и не понимаю в принципе!!!
0
|
|||||||
|
Почетный модератор
|
|||
| 27.06.2013, 19:58 | |||
|
1
|
|||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|||||||
| 27.06.2013, 20:59 [ТС] | |||||||
|
Ну как всегда - Дэвид Блэйн!
Только вот в силу КОНКРЕТНОЙ неопытности в данном вопросе - непонятно откуда извлекать необходимое инфо: там столько всего народилось...!!!
В где искать запрошенное?!! А вот за прояснение с Sub в Delphi => отдельное спасибо. Мне, честно говоря, несколько сложен для понимания данный трюк. Нет, инстинктивно - понимаю, однако выворот вообще из мозга вон. в SQL в этом плане понятно - поочередно забираешь данные после вызова сохраненной процедуры и нет взлома нейронных ячеек... Добавлено через 11 минут
0
|
|||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
|
| 27.06.2013, 21:26 [ТС] | |
|
Уточню - callback по возвращении содержит следующую красоту:
оттого и не очень понятно - где искать соль... Хоть коротенько и пробежался по верхушкам...
0
|
|
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||
| 27.06.2013, 21:39 [ТС] | ||||||
|
Как предположение:
создать некий массив из TACcountInfo и в методе
0
|
||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||
| 28.06.2013, 19:41 [ТС] | ||||||
|
Хоть немного уловил суть! Аж самому радуется!
С другой стороны - в коде Delphi все это видится однако весьма лаконичнее. И теперь даже понятнее... Обидно! Добавлено через 21 час 46 минут Собрал такую конструкцию:
Конечно, можно в конце вновь сделать ReDim на еденицу меньше текущего размера. Но может вообще есть более элегантный и менее затратный подход, чем постоянно менять размерность массива?
0
|
||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||
| 28.06.2013, 20:28 [ТС] | ||||||
|
А я и говорил, что не АС!
Что знал, то и применил!Хорошо. Попробовал:
Access violation at address 041A9D7F. Read of address 00000000
0
|
||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||||||||||||
| 29.06.2013, 10:31 [ТС] | ||||||||||||
|
Mkz!!! Типичная ошибка мелкого VB-иста!
Ну конечно - инициализировал без NEW!!! Добавлено через 1 час 0 минут Правильнее - объявил, но не инициализировал... Ну это больше так, для себя. А пока пытаюсь все собрать в кучу и привести в порядок описания... Добавлено через 10 часов 40 минут Понимаю, что не совсем к теме о DLL Delphi но, чтобы не создавать новую тему для пары высказываний, есть ли простой путь: полученный массив AccountInfo вывести в DataGridWiew или все же придется "традиционно" перебирать элементы массива и добавлять в таблицу? Добавлено через 1 час 50 минут Ладно - Бог с ним! Вроде все делаю правильно, Name возвращается, однако поля типа Id и ParentId возвращаются со значением типа "Невозможно вычислить значение". Сдается - надо маршаллить но что то подступиться не могу...
Добавлено через 21 минуту Есть живая папка, создал новую папку в сервере, удалил. После вызова функции ответ и на ту и на другую папки (их в итоге всего две) - Deleted = True Млин... Косяк в DLL что ли... Хочется верить, что в моих мозгах...
0
|
||||||||||||
|
Почетный модератор
|
|||||||
| 29.06.2013, 11:09 | |||||||
|
По предыдущим опытам, Boolean в Delphi однобайтовый.
1
|
|||||||
|
31 / 31 / 3
Регистрация: 08.08.2011
Сообщений: 195
|
||
| 01.07.2013, 19:27 [ТС] | ||
|
Отработал в воскресение, нынче присел за писанину и с радостью:
Со стороны String и StringBuilder - как я понял, тут только методом проверки что вылезет... В данном случае, чтобы не усложнять, достаточно String. Хотя некоторые функции кроме как через StringBuilder - никак.
0
|
||
| 01.07.2013, 19:27 | |
|
Как средствами RTTI получить указатель на ComponentArray[0] или как получить значения некоторых свойств? Как иcследовать DLL написанную на С++, Delphi? Как использовать в Delphi dll из .Net
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|