| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Обмен данными с dll (согласование типов) |
| Автор: sammix 2.10.2005, 11:31 |
| Проблема в следующем: есть dll написанная на дельфи. Экспортируемая функция должна возвращать массив строк. Конкретно список файлов с удалённого сервера. Возвращаемый результат должна принять программа написанная на C# string дельфийский и сишарпа не работают : Object not set to an instance of an object Может кто что-нибудь знает нащёт этого? |
| Автор: Дрон 2.10.2005, 19:28 |
| Ну, а можно хотя бы объявление функций увидеть? Хотя чует моё сердце, что дельфийский string напрямую в C# не передать. |
| Автор: sammix 2.10.2005, 20:17 | ||||
| Вот пример: длл на дельфи
теперь кусок кода на шарпе
Тут-то вылетает эксепшн типа NullReference. При чём если возвращать char или integer с длл"ки, то оно сработает. А вот со string выпендрывается. Даже pchar пробовал -> толка мало. |
| Автор: nikf 3.10.2005, 08:58 |
| прога сделанная на C# с такой dll в жизни не сможет работать. Как впрочем и прога написанная на чем-нибудь другом кроме дельфи или билдера. Нормальная dll экспортирует только простые типы данных, а string - это класс, хотя разработчикам дельфи этого и не видно... Хочешь экспортировать классы - пиши и клиента и dll в одной среде разработки или делай COM или .NET dll. |
| Автор: stab 3.10.2005, 09:05 | ||||
Вот так работает:
|
| Автор: sammix 3.10.2005, 19:48 | ||
| Ну спасибо cully Чёто я в прошлый раз не так сделал когда експортировал pchar. Теперь всё работает.
Не пишу .net dll потому что не сложно ломать. А так проект будет состоять из разных частей. И кроме того я пока работу с сетью не изучил в сишарпе, потому штопаю на дельфи. |
| Автор: nikf 4.10.2005, 10:27 | ||
На самом деле есть подводные камни при работе с dll вот это
будет хорошо работать если делать буквально как написано, те возвращать указатели на константные строки, а если ты строки создаешь в dll динамически в результате каких-то операций - кто их будет удалять? Не думал почему все апи dll возвращающие строки (точнее массивы символов) запрашивают у клиента указатель на буфер под размещение этой строки и размер этого буфера? ну это так, к слову |
| Автор: mr.DUDA 4.10.2005, 14:36 | ||
Если ф-ция, запрашивающая строку, (пусть она будет написана на .NET) копирует эту строку в свою собственную string-переменную, для программера этой ф-ции самое главное чтобы на момент копирования ничего в буфере не менялось. А это легко обеспечить, если в рамках экспортируемой ф-ции func1 ничего не делать над буфером. |
| Автор: nikf 4.10.2005, 14:47 | ||
|
| Автор: mr.DUDA 4.10.2005, 15:10 | ||
В паскале все локальные переменные объявляются в рамках видимости ф-ции, т.е. пока ф-ция исполняется, переменные - живые. Другое дело, что с ними произойдёт при выходе из ф-ции, тут конечно nikf прав на 100%. |