Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Имею переменную _bstr_t bstrStr. В неё залито какое то значение,типа"Hello,word!". Как перелить это в С-строку (массив символов,заканчивающийся нулем)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 14:11 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 14:26 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Спасибо. P.S. (Тьфу,как все просто.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 14:31 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
(Тьфу,как все просто.) _bstr_t это врапер для BSTR т.е. это Unicode-строка - вы уверены что хотите ее в char* переделать? Можно ведь и в wchar_t* Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 14:54 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
стоп,стоп,на самом деле мне нужно в unsigned char передавать а там приведение типа strcpy(szTmp,(LPCSTR)Tmp);//ругается на второй параметр на самом деле у меня под new-массивы из unsigned char заделан довольно боьшой кусок проги и ковырять его очень не хотелось бы ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 15:06 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 15:22 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Действительно,работает. Спасибо,ZrenBy . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 15:35 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Н-н-нда-а, работает оно ,как же. Компилится,то оно компилится,в вот при освобождении памяти прога сваливается. ////////////////// _bstr_t bstrStr; unsigned char* p_ucValue; int length; bstrStr = "Hello"; length = bstrStr.length()+1; p_ucFieldValue = new unsigned char(length); strcpy((char*)p_ucValue,(LPCSTR)bstrStr); delete []p_ucValue;//вылет ////////////////////////////////// мне кажется что всё таки нельзя для strcpy втупую приводить указатель на char к указателю на unsigned char ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 19:14 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Извиняюсь,ошибся сам. p_ucFieldValue = new unsigned char [ length ] ; а не p_ucFieldValue = new unsigned char ( length ) ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 19:30 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Вот еще вариант Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 19:49 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Можно и так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2004, 17:38 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
ZrenBy Код: sql 1. 2. 3. 4. 5. А у меня на строке: strcpy(szTmp,(LPCSTR)Tmp); VS2013 Выдает ошибку: error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. подскажите плиз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 16:33 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Разобрался сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2016, 19:53 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, Вот этот макрос _CRT_SECURE_NO_WARNINGS определи в проекте (лучше всего), или если не знаешь, как, напиши в первой строке исходного кода (каждого модуля, если их несколько). Код: plaintext 1. Когда вырастишь, и поймёшь, зачем это, макрос можно будет удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2016, 21:36 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
MasterZiv , спасибо за макрос! Есть вопрос по обмену данными между С++ и С# В разных способах результат один и тот же получаю Наступил на грабли в приведении типов в соответствие Чтобы не засорять тему можно в личку? Спасибо Модератор: чтобы не засорять тему, можно в новой теме. А "лички" на sql.ru никогда не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 20:41 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, с unicode сначала чуток разберись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2016, 21:28 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
ZrenBy Код: sql 1. 2. 3. 4. 5. тогда уж лучше так Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 21:23 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Уважаемые ГУРУ! Помогите пожалуйста разобраться. При использовании COM объекта (работа с WMI ) В качестве примера взял на сайте MSDN https://msdn.microsoft.com/en-us/library/aa390423(v=vs.85).aspx получаю результат - свойство объекта (строку с типом BSTR ). Строка содержит ожидаемое значение. Сохраняю его в _bstr_t resValue. Все это происходит в функции DLL (c++), которая получает параметром указатель на выделенный блок памяти необходимого размера из С# wchar_t* pResult Преобразовываю _bstr_t strBstr в wchar_t и записываю в выделенный блок памяти по переданному указателю. В вызывающем коде на C# получаю исключение, из DLL передается NULL А если я создам _bstr_t в ручную , (bstr_t strBstr = L"Test") то на стороне С# получаю нужную строку Подскажите пожалуйста на какие грабли я наступил. И как правильно преобразовать _bstr_t в данном случае Бьюсь уже неделю. Передавал строку и используя строковый буфер StringBuilder Пробовал передавать и непосредственно тип _bstr_t и в шарпе соответствующий код писал Результат один и тот же: "ручная" bstr_t строка передается, а bstr_t из COM объекта - нет, хотя при отладке pResult содержит данные Заранее всем благодарен С# Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вот такой вариант работает нормально C++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. А такой вариант дает исключение - NULL при передаче строки wchar_t* pResult C++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 21:58 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit Код: plaintext 1. подозреваю что resValue передаётся по значению, а не по ссылке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 22:28 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, Вот функция int GetStringID(bstr_t & ID) { ...... } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 22:39 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, ещё раз и целиком как в соседнем топике (в спойлер заверни, чтоб глаз не мозолила) дьявол - в деталях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2016, 22:52 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, Я все оформил в класс, и как консольное приложение все работает, все строки присутствуют Но как DLL, строки _bstr_t из COM не передаются С# Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. C++ Сама функция в DLL "C" __declspec(dllexport) int GetSomeText(wchar_t* pResult) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. HardWareData.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. HardWareData.cpp Функция GetWmiInfo(char strSQL[], wchar_t NamePrt[], bstr_t & resValue) Код: 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. Функция GetStringID(bstr_t & ID) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 12:05 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Потролить конечно проще, чем подсказать правильное решение :) Но и на том спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 21:55 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, видишь ли, у всех нас есть работа. только сейчас появилась возможность внимательно прочитать твой код да и решение предложить почище. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2016, 22:33 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил , Я благодарен за то что при всей занятости выделили на меня немного времени. Меня сбила с толку фраза: "в спойлер заверни, чтоб глаз не мозолила", подумал что надоедаю. :) Я благодарен за любую помощь и ценный совет:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 01:03 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, чистый вариант на мой взгляд - вернуть BSTR, маршаллер c# память почистит Код: plaintext 1. 2. 3. 4. 5. 6. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 01:31 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, твой код у меня успешно отработал, как ни странно )) из замеченного - VARIANT - желательно всегда инициализировать(VariantInit) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 11:20 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
ИзопропилArbit, твой код у меня успешно отработал, как ни странно )) из замеченного - VARIANT - желательно всегда инициализировать(VariantInit) 1. Код отработал нормально как чисто консольное приложение на С++ или как dll вызванная из С#? 2. Строка bstr_t передавалась созданная руками Код: plaintext 1. или созданная COM объектом в функции GetWmiInfo() Код: plaintext 1. Мне кажется, что _bstr_t resValue COM и что _bstr_t resValue обычный - это не одно и то же Я прочитал на одном из форумов что манипуляции со строками COM как с обычными строками не прокатывают. Это особые строки. А вот как с ними работать и не нашел пока. В гугле нашел пока только это: https://msdn.microsoft.com/en-us/library/ms235631.aspx что и попытался применить, но пока безрезультатно. ( там есть примеры для всех вариантов) Может в компиляторе моем... , У меня студия 2013 Но скорее всего это в моих руках(пока еще далеко не ровных) и в голове. :) Потому и пришел за помощью. Если у тебя все работает, скинь мне пожалуйста проект, попробую запустить у себя, может найду причину. Мне ОЧЕНЬ нужно решить эту задачу. Заранее благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 14:39 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit1. Код отработал нормально как чисто консольное приложение на С++ или как dll вызванная из С#? dll из c# ArbitЯ прочитал на одном из форумов что манипуляции со строками COM как с обычными строками не прокатывают. Это особые строки. читать COM строки можно как и обычные выделение памяти - имеет особенности, отдельно можно обсудить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 14:59 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
ArbitЕсли у тебя все работает, скинь мне пожалуйста проект, попробую запустить у себя, может найду причину. в 2015 студии, смотри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 15:11 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, Спасибо большое, вечером буду изучать! Отпишусь по результатам, но чуйка подсказывает, что дело в "мозгах и руках" :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2016, 17:17 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, добрый вечер! Докладываю... :)) Перепробовал кучу комбинаций с кодом. Задолбался конечно изрядно. В сухом остатке - Пришлось установить Community 2015 Мой проект заработал только после конвертации в студию 2015 придется дальше писать на новой студии. Так и не нашел где собака зарыта. Но ты мне реально серьезно помог с прочисткой мозгов Спасибо огромное! Можно будет, при необходимости, еще побеспокоить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 21:23 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
ArbitМожно будет, при необходимости, еще побеспокоить? можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2016, 22:08 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, добрый вечер! Все равно у меня грабли ... моих мозгов не хватает, нагуглить не получилось... - Твое консольное приложение Win32 работает нормально - Мое консольное win32 созданное на моей студии 2015 тоже нормально (это копия твоего) - Мое WindowsForm win32 приложение выдает исключение на 1 шаге функции GetWmiInfo: "Failed to initialize COM library. Error code = 0x". Мои потуги: Мне необходимо получить множество параметров железа Поэтому в функции GetStringID , я вызываю функцию GetWmiInfoс повторно с разными значениями параметров. Если только один вызов то в консольных приложениях все работает, а если повторные вызовы, то вылетало исключение на 2 шаге в GetWmiInfo "Set general COM security levels", так как COM уже инициализирован при первом вызове функции Поэтому в функцию GetWmiInfo я добавил новый параметр int fl - флаг повторного вызова После добавления параметра я получил нужный мне результат. Но когда я перенес код с консольного приложения в WindowsForm Код не хочет инициализировать COM уже на самом 1 шаге DLL лежит в папке "C:\VC\Cont\Debug\Wlb.dll" твоего проекта Все проекты ссылаются на эту же dll в этой же папке Все проекты в архиве в папке VC Может подскажешь? Две недели бьюсь Понимаю что нет времени. Но если появится - посмотри пожалуйста. Очень нужно Спасибо за твою готовность помочь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 19:51 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, Да и еще: WindowsForm я делаю на framework 3.5 так как приложение должно работать начиная с Win XP? чтобы не напрягать юзеров с установкой framework старших версий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 19:56 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
А как вложить архив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 20:02 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, маршаллинг с тех пор не менялся, жить будет. Не забудь указать в свойствах проекта, что дотнет приложение в 32 бит режиме должно запускаться, чтоб не делать две версии c++ dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 20:04 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, Вот ссылка на архив с проектами на моем облаке Загрузить на форум не получилось. так как размер больше допустимого https://cloud.mail.ru/public/JGfc/57NPRsbzd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 20:20 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Arbit, Инициализацию COM делает рантайм дотнет. он жить без этого не может просто выбрось все CoInitializeEx, CoInitializeSecurity, CoUninitialize() коды ошибок COM анализировать полезно если код ошибки поискать в гугле - первая же ссылка описывает проблему и решение - http://stackoverflow.com/questions/5662382/why-does-com-coinitializesecurity-fail-in-my-dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2016, 20:22 |
|
||
|
_bstr_t преобразовать в строку
|
|||
|---|---|---|---|
|
#18+
Изопропил, ... я даже и не знаю как тебя благодарить... Я не мог предположить что в примере MSDN эти Co... нафиг не нужны! Про коды ошибок я конечно притупил, учту непременно! Не суди строго. Я еще только учусь. Вот решил освоить новую профессию под занавес. Хотя, какая разница что программировать... мозги или компьютер... Принцип тот же, законы тоже, просто нужно выучить соответствующий язык! :)) Две недели... А какой я опыт и сколько нового узнал! Спасибо огромное и РЕСПЕКТ!! ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2016, 01:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018399]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 437ms |

| 0 / 0 |
