gzdreamway Ответов: 1

как передать растровый тип данных в библиотеку dll c++?


Программа не имеет ошибок подсказки, но нет никакого отображения изображения в форме c++, протестированы простые типы данных, такие как int, может быть нормальная доставка,пожалуйста, дайте мне простой пример, скажите мне, что делать


--------------------------------------------------------------------------
Код C#
[DllImport("dllTestForm.dll", EntryPoint = "showFormC")]
static extern void testShowFormC(byte[] photo,int len);

private void button6_Click(object sender, EventArgs e)
{
		Bitmap bmp = (Bitmap)Image.FromFile(@"d:\1\1.jpg");

		Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
		System.Drawing.Imaging.BitmapData bmpData =
		bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,bmp.PixelFormat);

		// Get the address of the first line.
		IntPtr ptr = bmpData.Scan0;

		// Declare an array to hold the bytes of the bitmap. 
		int bytes  = Math.Abs(bmpData.Stride) * bmp.Height;
		byte[] rgbValues = new byte[bytes];

		 // Copy the RGB values into the array.
		 System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);

		 // Unlock the bits.
		 bmp.UnlockBits(bmpData);

		 testShowFormC(rgbValues, bytes);
}

--------------------------------------------------------------------------
Код C++
[DllImport("dllTestForm.dll", EntryPoint = "showFormC")]
static extern void testShowFormC(byte[] photo,int len);

void __stdcall showFormC(byte *photo,int len)
{
    ThelloWorld *a=new ThelloWorld(Application);//这是一个winForm测试界面,显示图片用
    a->ImageEnView2->IO->LoadFromBuffer(photo,0,len);  
    a->Show();

}

Sergey Alexandrovich Kryukov

Почему вы задаете такой вопрос, не показывая реализацию testShowFormC? Что толку?
—СА

1 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

Это просто не имеет смысла, по крайней мере, код, который вы показываете. Как в C#, так и в C++ вы импортируете только некоторые функции из dllTestForm.DLL, но не показывают никакой реализации. Нет никакой гарантии, что она реализована должным образом или вообще существует. Что еще более важно, неясно, как должно быть показано растровое изображение, поскольку вы не передаете этой функции ничего, что могло бы быть использовано для рендеринга изображения; нет графического содержимого, нет дескриптора для какого-то элемента управления, где должно быть показано изображение. Весьма сомнительно, что изображение может быть показано на основе функции с такой сигнатурой.

—СА