Source내용이 아래와 같고요
unit Unit1;
interface
function sndPlaySound(lpszSoundName: String; uFlags: Longint): Longint; stdcall; --> (1)
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs;
type
TForm1 = class(TForm)
procedure Form1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function sndPlaySound(lpszSoundName: String; uFlags: Longint):
Longint; stdcall; --> (2)
implementation
function sndPlaySound; stdcall; external 'Winmm.dll'
name 'sndPlaySound';
{$R *.dfm}
procedure TForm1.Form1Click(Sender: TObject);
begin
sndPlaySound('d:source국민은행
HY2300_nowvoiceHY2300_V021.wav', 0)
end;
end.
일단 (1)에서 function을 선언하면 Error Message가
" [Error] Unit1.pas(6): Declaration expected but 'USES' found "
Display되고요.
(2)에서 function을 선언하면 Error Message가
"C:Program FilesBorlandDelphi6ProjectProject1.exe
faulted with message: 'access violation at 0x77f8ea53:
write of address 0x00030cb4'. Process Stopped Use Step or
Run to Continue"
라고 Display됩니다..
dll호출을 어떻게 하면 되는지요
참고로 VB에서는 아래와 같거든요
Public Declare Function sndPlaySound Lib "Winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
모쪼록 도움을 주시길 바랍니다...
단지 uses 절에 MMSystem을 포함시키면 됩니다..
MMSystem을 포함하기 싫다면 아래처럼 해보세요 ^^
----------------------------
function sndPlaySound(lpszSoundName: PChar; uFlags: UINT): BOOL; stdcall;
const
mmsyst = 'winmm.dll';
implementation
function sndPlaySound; external mmsyst name 'sndPlaySoundA';
----------------------------
sndPlaySound의 마지막 인수에는 0(SND_SYNC ) 보다는 1(SND_ASYNC) 로 하는거 훨 좋겠네요... 그래야 비동기로 소리를 낼 수 있으니까요 ^^
그럼 즐프하세요