1 / 1 / 1
Регистрация: 07.08.2015
Сообщений: 58
1

Получить изображение неизвестного размера (байтовый массив) из dll C++

12.04.2017, 18:48. Показов 824. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые Гуру!

Подскажите пожалуйста новичку как правильно осуществить сабж?
DLL (C++ ) читает поле BLOB из базы SQLite в байтовый массив.
Размер этого массива заранее неизвестен.
Нужно передать массив в проект С# и отобразить изображение в PictureBox

Вариант использовать нетовскую dll для работы с базой пожалуйста не предлагайте!

Попутно вопрос -
1 как скопировать данные в новый массив (исходя из полученного указателя) сильно не пинайте!
2. как очистить память выделенную под массив в коде dll (желательного без повторного вызова DLL)

В голову приходит только такая мысль (если она дурная, то поправьте пожалуйста):
С#
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
27
public partial class frmImagesMenager : Form
{
     [DllImport(@"D:\ProjectsC#\SQLite\Debug\sqlite_db.dll")]
     public static extern byte* DLL_LoadImage(int ImgId, ref int buffsize);
 
     public frmImagesMenager()
     {
            InitializeComponent();
     }
 
     private void GetImage()
     {
           int ImgId = 10;
           int buffsize = 0;
 
           byte* pArrImg = DLL_LoadImage(ImgId, out int buffsize);
           int[] NewImg = new int[buffsize];
 
           //здесь нужно скопировать полученные по указателю данные в новый массив (как?)
           //здесь очистить память, выделенную в DLL   (как?)                                                                               
 
           MemoryStream ms = new MemoryStream(NewImg);
           this.PictureBox.Image = Image.FromStream(ms);
           this.PictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
         }
 
}


С++
C++
1
2
3
4
5
6
7
8
9
10
11
extern "C" __declspec(dllexport) byte* DLL_LoadImage(int ImgID, int *size)
sqlite3 *db;
sqlite3_stmt *pStmt; 
sqlite3_prepare(db, strSQL, -1, &pStmt, NULL)
int rc = sqlite3_step(pStmt);
 
int size = sqlite3_column_bytes(pStmt, 0);
byte* buff = new byte[size];
memmove(&buff[0], sqlite3_column_blob(pStmt, 0), size);
 
return  buff;
Заранее благодарен откликнувшимся
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2017, 18:48
Ответы с готовыми решениями:

Возврат массива неизвестного размера из DLL (C++) в C#
Доброго дня. Есть DLL, в которой функция от аппаратуры получает набор данных заранее неизвестного...

Конвертировать байтовый массив в изображение
Есть база данных, получаю строку(массив байтов) из БД и конвертирую в тип byte. Пока что всё...

Массив неизвестного размера
Хочу написать функцию для нахождения предела последовательности. А и eps вводятся с клавиатуры....

Массив заранее неизвестного размера
Скажите как создать массив за рание не известной размерности. Искал по форумам приимеры описания,...

1
1 / 1 / 1
Регистрация: 07.08.2015
Сообщений: 58
13.04.2017, 21:29  [ТС] 2
Вопрос решен. Тема закрыта
0
13.04.2017, 21:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2017, 21:29
Помогаю со студенческими работами здесь

Массив неизвестного размера+функция
Алоха, имею такой вопрос вот у меня ниже код, который считает среднее значение всех елиментов...

Массив заранее неизвестного размера
Возможно сейчас произвучит тупой вопрос,не судите строго,но можно каким-нибудь образом сделать...

Создать массив неизвестного размера
string q= new string; Изначально не знаю сколько в этом массиве у меня будет элементов, как...

Как обьявить массив неизвестного размера?
Помогите разобраться, есть класс, в котором обьявлен двумерный массив структур. Размер массива...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru