Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
C++ передача данных в С# соответствие передаваемых типов
|
|||
|---|---|---|---|
|
#18+
Модератор: Пользуйся тэгом SRC! Здравствуйте уважаемые ГУРУ! Функция DLL на с++ в результате работы формирует строку типа _bstr_t Эту строку нужно передать в код на С# Делаю ледующим образом: 1. На С# получаю указатель на выделенный блок памяти и передаю его параметром в функцию dll на С++ 2. В DLL создается строка с типом _bstr_t ID , которая преобразуется в массив char и записывается по адресу переданному из С#в параметре Проблема: В С# приходит не вся строка, а только "BaseBoard=" Само значение _bstr_t BaseBoard не передается. То есть передается только константная часть строки ID Если передать только переменную_bstr_t BaseBoard то выскакивает исключение что передаваемое значение не может быть NULL Хотя когда DLL функция тестируется как консольное приложение то все работает, Переменная _bstr_t ID содержит и константную часть и значение переменной _bstr_t BaseBoard. Помогите пожалуйста найти грабли. Заранее благодарен всем откликнувшимся . В С# Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. С++: Код: 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. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 13:34 |
|
||
|
C++ передача данных в С# соответствие передаваемых типов
|
|||
|---|---|---|---|
|
#18+
Arbit, 1)WMI доступен без всяких костылей в c# 2) навскид - _bstr_t - юникодный , strcpy_s - нет, VARIANT - неплохо бы инициализировать и проверять результат выполнения pclsObj->Get ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 15:06 |
|
||
|
C++ передача данных в С# соответствие передаваемых типов
|
|||
|---|---|---|---|
|
#18+
Прошу прощения за не оформленный код . Искал на панели кнопку С++ а надо было SRS/ Учту! В С# WMI у меня работает. Но мне нужно именно на С++ Я понимаю, что дело в преобразовании типов. Но строковая константа же прокатывает! А переменная этого же типа не прокатывает. Я и другие способы передачи пробовал и результат тот же например: Импорт в С# Код: plaintext 1. 2. 3. Объявление на стороне С++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. В окне отладки vtProp.bstrVal указывается как тип BSTR но возвращается как пустая строка . Не могу понять где собака порылась... Подскажите пожалуйста как правильно нужно это сделать. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 20:17 |
|
||
|
C++ передача данных в С# соответствие передаваемых типов
|
|||
|---|---|---|---|
|
#18+
Arbit, с новыми багами! возвращать нужно result.Detach() vtProp.bstrVal - что там ? есть нужная юникодная строка? правильная ли длина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 20:36 |
|
||
|
C++ передача данных в С# соответствие передаваемых типов
|
|||
|---|---|---|---|
|
#18+
ИзопропилArbit, с новыми багами! возвращать нужно result.Detach() vtProp.bstrVal - что там ? есть нужная юникодная строка? правильная ли длина? 1. Что это за баги? 2. vtProp.bstrVal в окне отладки содержит - BSTR = 0x005205b4 L"PF05TBD8" 3. _bstr_t res = vtProp.bstrVal ; _bstr_t ID = L"BaseBoard=" + _bstr_t res ; // ID содержит L"BaseBoard=PF05TBD8" Но в С# получаю только "BaseBoard=" 4. если возвращаю _bstr_t res. Detach() _bstr_t ID = L"BaseBoard=" + res.Detach(); Вылетает системное исключение Не могу сообразить что к чему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 23:37 |
|
||
|
C++ передача данных в С# соответствие передаваемых типов
|
|||
|---|---|---|---|
|
#18+
Когда вылетает исключение то там говорится о некорректности работы с <comutil.h> //Для работы с классом _bstr_t ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 23:48 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2018407]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 276ms |
| total: | 435ms |

| 0 / 0 |
