指针如何传递参数到线程中,帮我查错!(30分)

  • 主题发起人 主题发起人 同甘共苦
  • 开始时间 开始时间

同甘共苦

Unregistered / Unconfirmed
GUEST, unregistred user!
uses mmsystem;
{$R *.dfm}
function sound( P: Pointer): Longint;
stdcall;
var wavname: pchar;
begin
wavname := pchar(p^);
showmessage(wavname);//
playsound(wavname, 0, SND_ASYNC);//却无法播放
end;
procedure TForm1.FormCreate(Sender: TObject);
var
hThread: Thandle;
//定义一个句柄
ThreadID: DWord;
wavstring: string;
P: pointer;
begin
getmem(p, 255);
wavstring := extractfilepath(paramstr(0)) + 'wav/show.wav ';//show.wav 此路径是存在文件也存在
p := @wavstring;
hThread := CreateThread(nil, 0, @sound, p, 0, threadid);
end;
 
出了什麼問題
 
不能播放啊
 
function sound( P: Pointer): Longint;
stdcall;
var wavname: pchar;
begin
showmessage(‘wavname’);//
end;
先看一下sound是否執行了!
 
PPt = ^pt;
pt = record
s: String;
end;

function sound( P: Pointer): Longint;
stdcall;
var
Data: PPt;
DC: HDC;
begin
Data := PPt(p);
DC := GetDC(Form1.Handle);
TextOut(DC, 10, 10, PChar(Data^.s), Length(Data^.s));
ReleaseDC(Form1.Handle, DC);
Dispose(Data);
//showmessage(Data^.s);//
//playsound(Data^.s, 0, SND_ASYNC);//却无法播放
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Data: PPt;
hThread1: THandle;
ThreadID: DWORD;
begin
New(Data);
Data.s := extractfilepath(paramstr(0)) + 'wav/show.wav ';
hThread1 := CreateThread(nil, 0, @sound,
Data, 0, ThreadID);
end;
 
Thank holyknight!!!给你加分了
只是可以解释一下为什么你那样可以传递参数,我那样不行吗???
 
pchar(p^);怎么可能将指针转为PChar?
 
后退
顶部