|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.01.2012, 00:52 | #1 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Передать wchar_t* из Си dll в Делфи приложение.
Есть Си длл, в ней экспортированная функция:
Код:
Код:
А и сама цель всего этого - из длл вернуть текст через параметр.
Будь проще и люди к тебе потянутся
|
25.01.2012, 01:16 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
1)так как вы не используете def файл, то имя скорее всего не то что вы ожидаете.
проверьте сначало. 2)неверно написана процедура, она в принцице ничего не вернет, нужно или применять strcpy. или же можно просто вернуть указатель на вашу строку. 3)так же неверно описание процедуры в Делфи. 4)ну и вызов неверен. как бы делал я. С++,длл: Код:
в Делфи: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
25.01.2012, 23:29 | #3 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Так...с этим все ясно, спасибо.
Но все же остался еще один вопрос - а с одним параметром нельзя никак провернуть это дело? Ну что бы вот как-то так: Код:
Будь проще и люди к тебе потянутся
|
25.01.2012, 23:33 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
можно, но не стоит, ошибкостойкость(точнее возможность минимизировать ошибки) кода снижаете.
хотя, у вас в ДЛЛ константа или же изменяемое значение? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
25.01.2012, 23:57 | #5 | ||
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Цитата:
Цитата:
Будь проще и люди к тебе потянутся
|
||
26.01.2012, 18:21 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
подход с одним параметром приведет к тому, что мы не будем знать размер буфера, и будем тупо копировать данные по указателю, соответственно если вызывающий ждал 5символов, а мы скопируем 10, то будет ошибка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
26.01.2012, 19:37 | #7 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
spamer
А все же можете уточнить? подход, который ты практикуешь, страдает уязвимостью к переполнению буфере, который является проблемой безопасности #1. Главная же опасность для программиста заключается в том, что в нормальных конторах таких быстро отстреливают.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
27.01.2012, 00:50 | #8 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Rififi, не верно мыслите, ибо вот такой способ мне действительно не нужен, когда не известно рухнет приложение или нет...Поэтому вобщем-то и спрашиваю совет...
Тут вот что еще подумал - известно, что данные не смогут превышать определенный размер N (т.е. меньше может быть, но не больше), тогда ведь можно объявить константу под размер буфера, например Nmax байт и независимо от того, какой размер данных(т.е. это сформированная строка или предопределенная), передавать всегда Nmax байт. Вроде вариант нормальный, хотя может чего-то не учел. Что можете сказать по этому поводу?
Будь проще и люди к тебе потянутся
|
27.01.2012, 00:59 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Код:
Код:
проблемы с переполнением исключены, и раз вы сами можете поставить эти рамки то код вас ничем не ограничивает. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.01.2012, 01:04 | #10 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Значит решено. Как раз последний вариант меня устраивает.
Пепел Феникса, спасибо.
Будь проще и люди к тебе потянутся
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
передать в параметре путь для сохранения файл[консольное приложение] | Snake22 | Visual C++ | 1 | 19.01.2012 20:43 |
wchar_t под linux => wchar_t под windows | hard-t | Qt и кроссплатформенное программирование С/С++ | 0 | 28.10.2011 17:57 |
Как передать адрес метода из dll в приложение и присвоить его событию OnClick? | puga555 | Общие вопросы Delphi | 1 | 22.12.2009 17:04 |
Как передать путь на файл в приложение? | evgenrpo | Общие вопросы .NET | 5 | 20.11.2009 23:08 |
Как передать POST data через запрос в веб-приложение | Anticrim | Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) | 3 | 03.10.2007 18:19 |