プログラムでは、Delphi で QImage.bits() を使用したいと考えています。そのため、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 に表示し、ハードディスクや同様のメモリに保存しません。このトピックでは、単純なデバッグとテスト容易性のために単純な同様の関数を作成しました。この問題に対して真にシンプルなコードを書くことで私を助けることは可能ですか? どうもありがとう。(-_-)