Q&A

  • mmsystem 을 이용하면서...
var
  Form1: TForm1;
  WavIn : PHWaveIn;
  Header : PWaveHdr;
  Data : Pointer;
  Size : integer;

.
.
.


procedure TForm1.Button1Click(Sender: TObject);
var
   WavFm : PWaveFormatEx;
begin

   with WavFm^ do
   begin
     wFormatTag:=WAVE_FORMAT_PCM;
     nChannels:=1;
     nSamplesPerSec:=11025;
     nAvgBytesPerSec:=88200;
     nBlockAlign:=1;
     wBitsPerSample:=8;
     cbSize:=0;
   end;

   SendWaveDataToMem(WavFm);
end;

function TForm1.SendWaveDataToMem(WavFmtEx : PWaveFormatEx) : Boolean;
var
   i : integer;
   SizeBuf : integer;
   MemBlock : Pointer;
begin
    Result:=False; // FAILURE;
    WavIn:=New(PHWaveIn);
    SizeBuf:=256;
    i:=WaveInOpen(WavIn,0,WavFmtEx,Self.Handle,0,CALLBACK_WINDOW or WAVE_MAPPED);

    if i<>0 then EXIT;

    GetMem(MemBlock,SizeBuf);
    Header:= New(PwaveHdr);
    Header.lpData          := MemBlock;
    Header.dwBufferLength  := SizeBuf;
    Header.dwBytesRecorded := 0;
    Header.dwUser          := 0;
    Header.dwFlags         := 0;
    Header.dwLoops         := 0;

    waveInPrepareHeader(WavIn^,Header,SizeOf(TWavehdr));
    waveInAddBuffer(WavIn^,Header,SizeOf(TWaveHdr));

    WaveInStart(WavIn^);
end;


버튼 1에있는 구조체 값을 입력해서 넘겨줬는데요...
계속 컴파일러는 경고(Warning)메시지로 버튼1의 구조체가 초기화가 되지않았다고 나오네요...
컴파일은 되는데 실행시키면 계속 에러가 납니다...
도아주세요...
1  COMMENTS
  • Profile
    한원희 2002.07.13 02:14
    구조체 포인터가 가리킬 실제 구조체를 생성해 주지 않아서 그렇습니다.
    해당 구조체 크기만큼 메모리를 할당하여 해당 포인터가 그 메모리를 가리키도록 해 주어야 합니다.
    GetMem과 FreeMem 메소드를 이용해서 말이죠 ^^

    아래 소스 중간에 넣었으까, 참고하세요.


         //요기에 요렇게 추가해 보세요...
         GetMem(WavFm, Sizeof(TWaveFormatEx));



         // 생성한 메모리를 해제합니다.
         FreeMem(WavFm, Sizeof(TWaveFormatEx));