Balaraj Nayak Ответов: 1

Как передать указатель на массив массивов в C#


привет всем я пытаюсь вызвать функцию DLL с параметрами указателя,
но мои параметры , на которые я должен ссылаться, находятся в зубчатом массиве, поэтому теперь я должен ссылаться на массив указателя и передавать значения указателя для вызова функции DLL.

примечание: Я использую VISUAL STUDIO 2010

Что я уже пробовал:

функция DLL
[DllImport("BYRTORGB.dll")]
 public unsafe static extern void bayer2rgb24(byte* dst1, byte* src2, Int32 width, Int32 height);


код, который я вызываю для функции DLL.

unsafe
 {
   byte[][] dbuff = new byte[k][];
   fixed (byte* source = xBufs[k], dest = dbuff[k])
                                           {
   bayer2rgb24( dest, source, width, height);
   fs.Write(dbuff[k], 0, dbuff[k].Length);

1 Ответов

Рейтинг:
2

OriginalGriff

Когда вы задали этот вопрос 2 дня назад: Как конвертировать byte[] ato byte в C#[^]
Тебе сказали:

Цитата:
Вы не можете напрямую передать двумерный массив, потому что "расположение" данных не одно и то же.
Хуже того, то, что вы пытаетесь apss, не является "базовым" 2D - массивом - это зубчатый массив, что означает, что линии не все одинаковой длины или даже присутствуют в некоторых случаях.
Поскольку имя dst подразумевает, что одномерный массив будет использоваться вызываемой функцией в качестве выходного сигнала, жизненно важно правильно получить ti, а зубчатый массив определенно не подходит, поскольку его первое измерение на самом деле представляет собой массив ссылок на отдельные массивы байтов.


Вы не можете передать зубчатый массив в свою функцию, предполагая, что она будет работать: вам нужно создать 1D массив байтов, передать его и, вероятно, постобработать его в свой 2D зубчатый массив, как только у вас есть данные, и вы можете решить, где "разбить" массив.


Balaraj Nayak

не могли бы вы написать для него код? Я не понимаю, как это сделать.

OriginalGriff

Я не могу.
У меня есть без понятия что делает этот метод, что вы пытаетесь заставить его делать, как выглядят ваши данные, как будут организованы данные, возвращаемые этим методом.
В принципе, я ничего не знаю о вашем заявлении, а вы знаете все! Я не могу делать за вас работу, так как понятия не имею, в чем заключается ваша работа! :смеяться:

Balaraj Nayak

здесь я получил потоковые данные и сохранил их в формате xbufs[k][]; (это формат bayer .raw)
и теперь DLL-функция bayer2rgb должна взять его в качестве источника, а dbuff-в качестве назначения и преобразовать из bayer в rgb. это концепция, над которой я работаю.

Balaraj Nayak

как вы сказали выше ,создавая 1d массив и постобработку и т. д., Для этого вы можете написать общий концептуальный код, если это возможно, чтобы я мог принять его в свой проект .

спасибо

OriginalGriff

Нет - потому что мы понятия не имеем, как выглядят ваши потоковые данные, как они организованы или что-то еще. Даже если бы мы догадались, мы не смогли бы даже начать тестировать какое-либо решение, потому что
1) у нас нет ваших данных (и нет, я не хочу, чтобы вы пытались отправить мне),
2) у нас нет вашей библиотеки DLL для ее обработки (и нет, я не хочу, чтобы вы пытались отправить ее мне),
и
3) мы не имеем ни малейшего представления о том, что вы ожидаете получить в результате.

Вы, похоже, пытаетесь сделать это, "скрепляя" случайные куски кода на нескольких языках и надеясь, что все это само собой уладится. Это не жизнеспособная стратегия: вам нужно сесть и подумать о задаче и о том, что это влечет за собой. Никто не может сделать это за тебя!

Balaraj Nayak

в любом случае спасибо что потратили свое драгоценное время чтобы помочь мне
спасибо..

OriginalGriff

Всегда пожалуйста!
Удачи...