Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые Гуру! Сразу прошу вас не пинать больно, так как я новичок Собственно не могу сообразить как передать в C#, полученный в dll на c++ набор записей из SQLite. Использовать NET System.Data.SQLite для работы пожалуйста не предлагайте. C# используется только для пользовательского интерфейса, а вся работа с базой (запросы) осуществляется только в DLL на с++. Параметры для DLL я передаю из C# и обратно строковые данные тоже могу получить. А вот как можно передать из dll результирующий набор записей в C# (в виде объекта) на подобии DataTable в .NET чтобы присвоить как sourse DataGridView (если таковое возможно)? Или заполнять Grid построчно, но опять таки нужен полученные из dll объект (набор строк) Направьте пожалуйста мысль в правильную сторону. Мое гугление пока без нужного результата. Можно ли это сделать Маршалингом, если да, то подскажите как. С маршалингом простых данных я разобрался. А вот как со сложными структурами или объектами...? Как их подготовить в С++ к передаче и в С# распаковать не могу понять. Еще была мысль использовать JSON и передавать одной строкой. Распаковать строку JSON в объект С# я распакую, а вот как запаковать объект (набор записей) в строку JSON на стороне dll не нашел. Библиотеки json для с# и С++ в наличии. Вопрос корости работы такой связки пока не очень критичен, но желательно иметь в виду. Может есть другие решения, если приведете кусочек кода буду счастлив безмерно! Заранее благодарен откликнувшимся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2017, 20:22 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
ArbitА вот как со сложными структурами или объектами...? можно передать в c# XML, пригодный для прямой десериализации в dataset Модератор: Отредактировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2017, 20:49 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Изопропил, безмерно рад общению! :) а "анально" - это как перевести? Это как - "банально" или это как - через " *опу" :) Я шучу, просто рад встрече А что лучше использовать в моем случае с точки зрения производительности, XML или jcon? Я так понял что если - XML, то можно подключить как source к гриду, а если - json, то только заполнить грид строками в цикле из объекта после распаковки json? По скорости это не будет иметь значения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2017, 21:31 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
>Направьте пожалуйста мысль в правильную сторону 1. Читать учебники 2. Пока достаточно не прочитал, использовать стандартные средства работы с СУБД из C# 3. Не писать в С++ топик без оснований ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2017, 21:46 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Изопропил, спасибо большое! Как всегда, кратко и исчерпывающе! Именно то что мне нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2017, 23:05 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Изопропил, доброго дня! Изопропил можно передать в c# XML, пригодный для прямой десериализации в dataset А можно сериализовать/десериализовать объект DataTable без помещения его предварительно в контейнер DataSet? Я обычно сразу загружаю вот так, если всего одна таблица: Код: c# 1. 2. 3. или без DataSet это не работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 16:29 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Изопропил, Спасибо большое!!! Все работает великолепно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 22:23 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Изопропил, Прошу заранее прощения за беспокойство! Использовал XML для передачи набора строк из SQLite и все было хорошо, в DataTable все загружалось! Любые данные! Но это работало на очень маленьких наборах строк Когда же понадобилось передать из С++ в С# данные из более чем 33-34 строк(в зависимости от количества полей) Получаю пустой DataTable. Это что, недостаточно памяти выделяется для DataTable? Подскажите пожалуйста как можно решить эту задачу. Может я не учел чего-то формируя XML в С++? Или неправильно принимаю XML в С#? Заранее благодарен за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2017, 23:13 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Arbit, ты в ГитХабе есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2017, 23:39 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Siemargl, Еще раз повторюсь. Код рабочий. Данные любые отправляются и принимаются!!! Проблема только в том, что если набор строк превышает предел (у меня это - 33 строки) сериализованная строка не принимается из DLL Получаю исключение: {"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."} Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2017, 23:54 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
mayton, откуда мне там быть? :)) Я не профи, я просто люблю программирование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2017, 23:56 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Туда не нужен пропуск профи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 08:20 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Модератор: Отредактировано Нужен код DLL_Select - в ней не выделяется достаточно памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 16:33 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Siemargl, Да я понял что мало памяти. В dll формирование XML строки проверил - все правильно Сейчас сам попробую найти косяк с памятью. Если не получится то побеспокою Вас Спасибо за желание помочь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 16:45 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Siemargl, Я делал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. В C# принимал так: Код: c# 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. У меня есть подозрение, что в таком исполнении передачи строки, в памяти выделяется какой-то default размер И все, что превышает - лезет в защищенную память. Видимо нужно передавать строку, как байтовый массив и возвращать указатель на этот массив и размер его. А в С# получать указатель как IntPtr и переводить массив в string Или есть более правильное решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 17:38 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Arbit//Перевожу ее в base64 и возвращаю: И возвращаешь указатель на уже освобождённую память. Модератор: Отредактировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 17:52 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, А нельзя ли чуть полегче, без цитат И чуть подробнее Я не профи и не студент, и вообще не технарь. Я из другого "цеха" я программирую мозги на любой "платформе". А сейчас изучаю другое программирование и по ходу пишу свой маленький проектик. Давайте дружить! :) Приведенный код работает, но до определенного объема передаваемых данных Если можете пролить свет, буду благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 18:19 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
ArbitЯ не профи и не студент, и вообще не технарь. Я из другого "цеха" я программирую мозги на любой "платформе". Ок, перевожу на лекарский: ты посылаешь сестру за пациентом с койки номер шесть. Но ты не позаботился о том, чтобы этого пациента не трогали, поэтому он давно умер, был вскрыт, расфасован на органы и частично кремирован. То, что тебе притащит сестра может быть куском нужного пациента, а может быть и вообще левым пациентом, которому не повезло занять эту койку гораздо позже. Если не повезёт, то там вообще не окажется этой койки, поскольку она сгорела вместе с госпиталем. А теперь таки начни изучать что такое компьютеры, как они работают, что такое память и как ею следует управлять с тем, чтобы и койка была на месте и пациента не порезали до момента как его к тебе привезут. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 19:20 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Да... А я к Вам ведь, батенька, на ВЫ, И больше чем уверен, что вдвое если не больше старше Вас.. А ведь некоторое время назад я получил от Вас достаточно приличную для меня помощь и, причем, без всяких понтов. Я даже прилюдно выразил свою Особую благодарность Вам и другим Вашим коллегам Если бы у Уважаемого Изопропила была минутка свободного времени, он бы не писал так много букв, Одно предложение - и решение вопроса было бы найдено. Достойный пример для подражания! Ну да ладно, бог Вам судья На этом закончим общение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 20:15 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Arbit..И больше чем уверен, что вдвое если не больше старше Вас..Эт врядли, столько пока не живут=) В общем проблема в том, что твой strXML.c_str() уничтожен по выходу из функции, как локальная переменная. Лучше передавай функции свой буфер нужного (с запасом размера), в который будет писаться результат. С bstr тоже можно, но контролировать кто создает и освобождает ее память ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 21:30 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Arbit, не переживай док! Поможем тебе. А все нехорожие и злые поциенты будут прокапаны и проклизьмены и уложены спать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 21:35 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
SiemarglЛучше передавай функции свой буфер нужного (с запасом размера), в который будет писаться результат. Пока помню, еще его надо залочить в памяти,чтобы GC не передвинул. Все в MSDN есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2017, 21:48 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
Siemargl, SiemarglВ общем проблема в том, что твой strXML.c_str() уничтожен по выходу из функции, как локальная переменная. Объясните пожалуйста "особоодаренному" почему: не смотря на это я получаю в С# XML строку десериализую ее и гружу благополучно в grid? Проблема только в том что при передаче строки длиной больше определенного значения вылетает исключение Есть у меня еще вариант. Я передавал из dll не строку а байтовый массив изображения Делал так (выделял и очищал память в C#) Код: c# 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. В C++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Можно пойти этим путем при передачи строки, но теперь нужно перегнать string в байтовый массив и как быть с символом конца строки? записывать его в массив или нет для передачи из DLL в С#? И как лучше сделать это преобразование? Массив будет большой там будет много данных для грида и памяти нужно будет много и как я понял, по результатам гугления нужен непрерывный блок памяти Что подскажите? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2017, 00:06 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
ArbitОбъясните пожалуйста "особоодаренному" почему: не смотря на это я получаю в С# XML строку десериализую ее и гружу благополучно в grid? Проблема только в том что при передаче строки длиной больше определенного значения вылетает исключение Тебе Сибиряков именно на этот вопрос и ответил, только на своем языке. Ладно, переведу: Освобожденная память локального объекта, в которой была полная правильная строка xml, все еще может полностью или частично принадлежать твоему процессу, и если повезет - даже с правильными не затертыми данными. На маленьких размерах тебе везет (хотя дело не в везении, конечно, а в том, что менеджер памяти резервный буфер оставил в этом месте, плюс другие потоки не пишут (пока) туда). Медсестра принесла часть трупа)) Сделай, например, так: 1. Выдели вручную память (под строку) в dll под эту строку (xml.c_str), скопируй в нее данные, ее и возвращай в c# 2. Сделай в dll функцию cpp_free с параметром - указатель на строку, в функции просто удаляй память 3. В c# после использования строки вызови cpp_free Думаю, должно заработать, если шарп "не испортит (не передвинет) указатель", но тут я уже не разбираюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2017, 03:25 |
|
||
|
Передача данных C# -> DLL С++ ->SQLite и обратно
|
|||
|---|---|---|---|
|
#18+
YuRock, спасибо большое YuRockОсвобожденная память локального объекта, в которой была полная правильная строка xml, все еще может полностью или частично принадлежать твоему процессу, и если повезет - даже с правильными не затертыми данными . Все кратко и понятно! Разве трудно было написать Сибирякову эти две строчи? Ан нет... ладно проехали YuRock2. Сделай в dll функцию cpp_free с параметром - указатель на строку, в функции просто удаляй память 3. В c# после использования строки вызови cpp_free Мне не хочется дважды обращаться к DLL - второй раз для очистки памяти. Хочется за один раз а если я сделаю как писал выше C# Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2017, 12:19 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=25&tid=2018092]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 184ms |

| 0 / 0 |
