|
곽성주 님이 쓰신 글 :
: 잘돌아가는 델파이코드인데 빌더로 바꾸려면 에러가 나에요 --;
: dll 함수 부르는 부분에서 영상데이타 넘기는 방법이 빌더로 잘 모르겟어요.
: dll 파일 첨부했습니다.
:
: function raw2ezwf(var RawData:Byte; ls_des_filename:string; iWidth,iHeight:longint;
: fBitRate:single; iLevel:integer; iWavelet:longint):longint; stdcall; external 'ezw.dll'
:
: ...
: ...
: var
: fs: TFileStream;
: img_data: array of Byte; // 이미지 데이타 저장공간
:
: file_name, ezw_name: string; // 입출력 파일명
: dummy: longint;
: // i,j,k: integer;
: begin
: file_name:='c:\g512x512.bmp';
: ezw_name:='c:\test.ezw';
:
: fs := TFileStream.Create(file_name, fmOpenRead);
: try
: img_size := fs.Size;
: SetLength(img_data, img_size);
: // pointer 로 형 변환후 ^를 추가
: fs.Seek(1079, soFromBeginning );
: fs.Read(pointer(img_data)^, img_size);
: // BitRate=0.4, Level=6, Wavelet=2
: dummy:=raw2ezwf(img_data[0], ezw_name, 512, 512, 0.4, 6, 2); <<--여기서 이미지데이타 넘기기가 안되네
: finally
: fs.free;
: ShowMessage('Successful !');
: end;
: end;
extern "C" __declspec(dllimport)
long __stdcall raw2ezwf(unsigned char *RawData, String ls_des_filename, long iWidth, long iHeight,
float fBitRate, int iLevel, long iWavelet);
{
TFileStream *fs;
unsigned char *img_data;
String file_name, ezw_name;
long dummy;
int i,j,k;
file_name = "c:\\g512x512.bmp";
ezw_name = "c:\\test.ezw";
if ( ! ExistFile(file_name) ) { return -1; }
fs = new TFileStream( file_name, fmOpenRead | fmShareDenyNone );
img_data = new unsigned char[img_size];
__try
{
img_size = fs->Size;
fs->Seek( 1079, soFromBeginning );
fs->Read( img_data, img_size );
dummy = raw2ezwf( &(img_data[0]), ezw_name, 512, 512, 0.4f, 6, 2); // var 는 콜바이 레퍼런스로, 적당한 포인터나 참조형이 필요한데, 대개 포인터를 쓸겁니다.
}
__finally
{
delete img_data;
delete fs;
ShowMessage("Working Finished !"); // 예외가 발생해도 여기는 지나가므로..
}
}
맞는지 잘 몰겠네요 -_-;;
|