|
|
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
Код: 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. сама библиотека подключается - только в путь. адрес же ф-ции получить не могу - все время null. если, как в листинге, указываю ее адрес прямо, то она вызывается, но возвращает рез-т, возникающий в случае программного исключения (-1). при том, что с с++ builder-приложением отрабатывает нормально. код dll: Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 12:21 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
А вы думаете, что MS Visual С++ и Borland C++ Builder используют одинаковую реализацию std::vector ???? А адрес не находится потому, что имя у функции в dll что-то типа BDEQuery$qp33std@%vector$i17std@%allocator$i%%pxct2 (можете Depedncy Walker'ом или чем другим посмотреть). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 13:34 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
угу, спасибо. глянул + нашел похожую проблему - лечится либо указанием этих ?@@# и.т.д =))) либо extern "C" приобъявлении. спасибо за помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 14:35 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
Дык, адрес-то вы найдете... А вот передать std::vector в dll собраную другим компилятором скорее всего не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 15:15 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
это да, только что наткнулся. передаю свежесозданный вектор, размер 0 => в dll'ке он уже р-ром под 4мб. в связи с чем это? + а чем можно сие заменить? мне нужен расширяемый массив для передачи данных =/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 15:43 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
Указатель на адрес памяти и размер. Для расширения realloc. или список. Нет необходимости передовать размер, и быстрее расширяться будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 15:51 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
у меня есть класс record: record.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: 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. его функционала должно хватить для данной операции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 15:57 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
Хватит, т.к. этот класс предоствляет свои данные во внешний мир. В случае необходимости, его можно будт расширить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:07 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
Вы не сможете передавать между разными компиляторами никакие сложные объекты. Более того, вы не сможете сделать realloc для переданого указателя. Заменить можно только реализацией COM-обекта с нужными методами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:12 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
спасибо, попробую ч/з com. с классом record проблема даже в случае одного компилятора: рез-т запроса должен быть в районе 13мб, меняю ему р-р на требуемый, начинаю закидывать данные: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. [quote]end address: 7f6ebb61 current address: c8ffd1[/quote] , он вываливается с access violation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:25 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
Да, на счет объекта я ошибся. Можно передовать только кусок данных, который нужно будет всунуть в новый объект. А реаллок будет работать. Если даже он не сможет расширить в текущей области, он создаст в новой и скопирует данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:25 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
BarloneВы не сможете передавать между разными компиляторами никакие сложные объекты... - утверждение folse. см. вызов чужих библиотек. например из клиппера или фортрана - азм. обьектники... BarloneБолее того, вы не сможете сделать realloc для переданого указателя... - утверждение true.хотя зависит от OS и многих весчей... Если очень категорично - так же мона... BarloneЗаменить можно только реализацией COM-обекта с нужными методами. - корректней такая формулировка... Заменить можно реализацией COM-обекта с нужными методами. Даже достаточно применения просто указанной методологии, без оглядки на ось и прочей ерунды... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:26 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
ступил. надо сперва resize, потом уже iter = ptrRes.begin(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:35 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
13th_apostle Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 1. Выделение памяти производится из расчета, что myQ->RecordSize >= myQ->Fields->operator [](j=1..myQ->FieldCount)->Size. Это верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:36 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
я ступил просто: realloc сохраняет старые данные, но не старый адрес =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:38 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
kolobok0 BarloneВы не сможете передавать между разными компиляторами никакие сложные объекты... - утверждение folse. см. вызов чужих библиотек. например из клиппера или фортрана - азм. обьектники... Я имел ввиду обекты типа std::vector и т.п. Понятно что можно передать любую структуру. А вот с вызовом методов может быть облом (с объектами STL точно будет облом - реализации у borland и ms разные). kolobok0 BarloneБолее того, вы не сможете сделать realloc для переданого указателя... - утверждение true.хотя зависит от OS и многих весчей... Если очень категорично - так же мона... Можно, только осторожно... malloc/realloc/free не дергают напрямую функции winapi. Там хранятся списки свободных блоков, устроеные в разных компиляторах по разному. На самом деле всё ещё хуже - даже если и приложение и dll компилируются MSVC, не всегда можно делать например malloc в приложении а free в dll (или наоборот). Можно только если оба используют dynamic runtime library. А если приложение или dll или оба скомпилированы со static runtime library (или используют разные версии msvcrt.dll),то возможен облом в виде периодических GPF. kolobok0 BarloneЗаменить можно только реализацией COM-обекта с нужными методами. - корректней такая формулировка... Заменить можно реализацией COM-обекта с нужными методами. Даже достаточно применения просто указанной методологии, без оглядки на ось и прочей ерунды... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 16:53 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
Да, с классом всё правильно. Если класс реализован в dll, то все malloc/realloc/free будут вызываться из dll. Это должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 17:02 |
|
||
|
работа c++builder'овской dll в приложении visual .net
|
|||
|---|---|---|---|
|
#18+
BarloneДа, с классом всё правильно. Если класс реализован в dll, то все malloc/realloc/free будут вызываться из dll. Это должно работать. гмм, объект класса создается в приложении, он по ссылке передается в dll, там realloc, возвращается приложению, из него выцепляются данные, после чего там он и free. ps. запустил тест - без ошибок, но 13мб он получал оч долго (около 4 мин.). может, есть вариант более быстродействующий? подскажите, плз, куда копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=345&tid=2030883]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 347ms |

| 0 / 0 |
