![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| sammix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 1.10.2005 Репутация: нет Всего: 2 |
Проблема в следующем:
есть dll написанная на дельфи. Экспортируемая функция должна возвращать массив строк. Конкретно список файлов с удалённого сервера. Возвращаемый результат должна принять программа написанная на C# string дельфийский и сишарпа не работают : Object not set to an instance of an object Может кто что-нибудь знает нащёт этого? |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Ну, а можно хотя бы объявление функций увидеть?
Хотя чует моё сердце, что дельфийский string напрямую в C# не передать. -------------------- Да. Именно так. |
|||
|
||||
| sammix |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 1.10.2005 Репутация: нет Всего: 2 |
Вот пример:
длл на дельфи
теперь кусок кода на шарпе
Тут-то вылетает эксепшн типа NullReference. При чём если возвращать char или integer с длл"ки, то оно сработает. А вот со string выпендрывается. Даже pchar пробовал -> толка мало. |
||||
|
|||||
| nikf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 6.6.2005 Где: город-герой Жирно вск Репутация: нет Всего: 1 |
прога сделанная на C# с такой dll в жизни не сможет работать. Как впрочем и прога написанная на чем-нибудь другом кроме дельфи или билдера. Нормальная dll экспортирует только простые типы данных, а string - это класс, хотя разработчикам дельфи этого и не видно... Хочешь экспортировать классы - пиши и клиента и dll в одной среде разработки или делай COM или .NET dll.
Это сообщение отредактировал(а) nikf - 3.10.2005, 09:00 |
|||
|
||||
| stab |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
Вот так работает:
-------------------- 6, 6, 6 - the number of the beast. |
||||
|
|||||
| sammix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 1.10.2005 Репутация: нет Всего: 2 |
Ну спасибо cully
Чёто я в прошлый раз не так сделал когда експортировал pchar. Теперь всё работает.
Не пишу .net dll потому что не сложно ломать. А так проект будет состоять из разных частей. И кроме того я пока работу с сетью не изучил в сишарпе, потому штопаю на дельфи. Это сообщение отредактировал(а) sammix - 3.10.2005, 19:51 |
|||
|
||||
| nikf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 6.6.2005 Где: город-герой Жирно вск Репутация: нет Всего: 1 |
На самом деле есть подводные камни при работе с dll вот это
будет хорошо работать если делать буквально как написано, те возвращать указатели на константные строки, а если ты строки создаешь в dll динамически в результате каких-то операций - кто их будет удалять? Не думал почему все апи dll возвращающие строки (точнее массивы символов) запрашивают у клиента указатель на буфер под размещение этой строки и размер этого буфера? ну это так, к слову |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Если ф-ция, запрашивающая строку, (пусть она будет написана на .NET) копирует эту строку в свою собственную string-переменную, для программера этой ф-ции самое главное чтобы на момент копирования ничего в буфере не менялось. А это легко обеспечить, если в рамках экспортируемой ф-ции func1 ничего не делать над буфером. -------------------- ![]() |
|||
|
||||
| nikf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 6.6.2005 Где: город-герой Жирно вск Репутация: нет Всего: 1 |
Это сообщение отредактировал(а) nikf - 4.10.2005, 14:48 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
В паскале все локальные переменные объявляются в рамках видимости ф-ции, т.е. пока ф-ция исполняется, переменные - живые. Другое дело, что с ними произойдёт при выходе из ф-ции, тут конечно nikf прав на 100%. -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |