В программе я хочу использовать QImage.bits () в Delphi. Итак, в Qt я была создана dll. Исходный код dll, указанный ниже:
test.h:
#ifndef TEST_H
#define TEST_H
#include "test_global.h"
extern "C"{
TESTSHARED_EXPORT uchar* testFunc();
}
#endif // TEST_H
test.cpp:
#include "test.h"
#include <QtGui>
QImage image;
uchar* testFunc(){
image.load("c:\\1.png","PNG");
return (uchar*)image.constBits();
}
а на стороне Delphi я использую этот код для использования Qt dll:
function testFunc(): PByteArray; external 'test.dll';
// ...
procedure TForm3.Button1Click(Sender: TObject);
var
bStream: TBytesStream;
P: PByteArray;
Size: Cardinal;
begin
P := testFunc;
Size := Length(PAnsiChar(P)); // AnsiChar = 1 Byte
bStream := TBytesStream.Create();
try
bStream.Write(P[0], Size); // Works Fine (^_^)
bStream.Position := 0;
bStream.SaveToFile('c:\scr.txt');
finally
bStream.Free;
end;
end;
когда я вызываю функцию dll, никакие данные не возвращаются! можешь помочь мне?
Обновление 1: В реальной ситуации моя функция Qt очень сложна, и я не могу написать ее на Delphi по многим причинам. Фактически исходная функция снимала снимок экрана с устройства и работала на нем в основной памяти. и в результате я хочу отправить байты этого изображения в Delphi для отображения его в TImage, но не сохранять его на жестком диске и подобных воспоминаниях. и в этом разделе я просто создал простую аналогичную функцию для простой отладки и тестирования. Можно ли мне помочь, написав действительно простой код для решения этой проблемы? Большое вам спасибо. (-_-)
uchar*
сPByte
. Вот и все. - person David Heffernan   schedule 07.09.2012