|
|
|
DLL Extern "C" string & char
|
|||
|---|---|---|---|
|
#18+
Народ, подскажите... "сами мы не местные" (с) где-то в метро Понадобилось создать DLL и подключить к своему приложению на Powerbuilder. Мое приложение может вызывать функции из внешних ДЛЛ только с в нотации extern "C". Создал две функции - см. код ниже (не пинайте сильно за код - только учусь) Код рабочий, но насколько я понимаю в функции exp_replace_all необходимо освобождать память выделенную под переменные string - иначе ИМХО происходит утечка памяти. Подскажите плиз как работать со строками эффективнее в данной постановке задачи? P.S. Использую компилятор MinGW + Code::Blocks Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 17:02 |
|
||
|
DLL Extern "C" string & char
|
|||
|---|---|---|---|
|
#18+
dGrichineСоздал две функции - см. код ниже (не пинайте сильно за код - только учусь) 1) пиши лучше на plain С, проще будет жить 2) PB требует stdcall функций, а по умолчанию делаются cdecl. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 16:38 |
|
||
|
DLL Extern "C" string & char
|
|||
|---|---|---|---|
|
#18+
White Owl 1) пиши лучше на plain С, проще будет жить Да, тоже пришел к этому выводу - конвертация char* в string и наоброт не тривиальное дело, да при том что надо освобждать память при возвращении из функции... два дня изучал различные форумы по данной теме - однозначного решения нет - такое ощущение, что его нет в принципе :) даже сделал объект, который сам за собой очищает память, но при возврате из функции, он благополучно очищает и значение результата :) мрак... вижу выход писать на чистом С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 22:20 |
|
||
|
DLL Extern "C" string & char
|
|||
|---|---|---|---|
|
#18+
dGrichineДа, тоже пришел к этому выводу - конвертация char* в string и наоброт не тривиальное дело, да при том что надо освобждать память при возвращении из функции... два дня изучал различные форумы по данной теме - однозначного решения нет - такое ощущение, что его нет в принципе :)Ну не такое уж и сложное на самом деле, просто учти что в классическом С++ нету такого примитивного типа данных как string. Это исправляется тем, что string реализуют во всех библиотеках классов. Но это в свою очередь, тянет за собой то, что с разными реализациями string надо работать по разному.... В общем проблема не столько сложная, сколько дурацкая :) dGrichineдаже сделал объект, который сам за собой очищает память, но при возврате из функции, он благополучно очищает и значение результата :) мрак...А этот как раз нормально. Ты не можешь гарантировать что память выделеная (или перераспределеная) внутри dll будет доступной хосту. При работе с dll хост должен распределять память и отдавать в dll указатель на нее. dGrichineвижу выход писать на чистом Сесли я правильно понял что ты хочешь сделать, то примерно так: Делаешь ReplaceAll.c, а чтоб уж совсем не связываться ни с какими библиотеками, можно и вручную поиграться с указателями :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Код: plaintext 1. Ну а в PB уже объявляешь: Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 00:50 |
|
||
|
DLL Extern "C" string & char
|
|||
|---|---|---|---|
|
#18+
Спасибо White Owl ! Буду изучать пример. Правда немного пугает Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 16:53 |
|
||
|
DLL Extern "C" string & char
|
|||
|---|---|---|---|
|
#18+
dGrichineСпасибо White Owl ! Буду изучать пример. Правда немного пугает Код: plaintext Goto вещь удобная и полезная, в разумных пределах конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 17:01 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34385649&tid=2029271]: |
0ms |
get settings: |
4ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
164ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 434ms |

| 0 / 0 |
