Q&A

  • 오늘은 질문하는 날인가 봄니다. dll호출 방법이 어떻게 되는지요?
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

모쪼록 도움을 주시길 바랍니다...
2  COMMENTS
  • Profile
    강형철 2003.10.18 11:15
    이건 이미 델파이에서 사용될 수 있도록 선언이 되어있는겂니다~

    단지 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) 로 하는거 훨 좋겠네요...  그래야 비동기로 소리를 낼 수 있으니까요 ^^

    그럼 즐프하세요

  • Profile
    김성근 2003.10.20 19:48