![]() |
Re: Problem mit Threads
Mitdenken. Ich wette mal StatusProc ist auch nicht als stdcall deklariert.
|
Re: Problem mit Threads
Könnt ihr mir sagen, warum mir Delphi abschmiert, wenn ich stdcall; benutze ? Einmal neugestartet (RESTARTTASTE) und eben gerade noch so, mit dem ausnahmsweise nicht abgestürzten Taskmanager, gerettet.
|
Re: Problem mit Threads
Es koennte sein das die bass.dll cdecl statt stdcall will. Also StatusProc mal probeweise mit cdecl statt stdcall deklarieren.
|
Re: Problem mit Threads
Hmm...ich habe gerade herausgefunden, dass OpenURL Delphi aufhängt, wenn dort ein stdcall; steht, bei cdecl; passiert hingegen überhaupt nichts. StatusProc funktioniert mit stdcall.
|
Re: Problem mit Threads
Hast du Speicher reserviert für den Parameter?
Sonst ist es klar, dass es knallt. :)
Delphi-Quellcode:
procedure TfrmMain.lvDblClick(Sender: TObject);
var p: PChar; begin GetMem(p, Length(urls[0]) +1); // Speicher reservieren, da eine lokale Variable nach Durchlauf der Funktion/Prozedur nicht mehr besteht StrPCopy(p, urls[0]); cthread := StartPlayStream(p); end; function OpenURL(url: PChar) : Integer; var icy: PChar; Len, Progress: DWORD; begin Result := 0; // restlicher Code hier... FreeMem(url); // Speicher wieder freigeben end; |
Re: Problem mit Threads
Das verwundert mich jetzt aber sehr. Ich habe nochmal bei meinem D6 nachgeschaut und TThreadFunc sollte weder stdcall noch cdecl haben.
Ich habe nicht realisiert das BeginThread ja eine Delphifunktion ist und keine Win32-Funktion. |
Re: Problem mit Threads
ste_ett, wenn man den Speicher alloziiert, dann sollte man ihn auch wieder freigeben. p als lokale Variable ist also schlecht.
|
Re: Problem mit Threads
Zitat:
Als Parameter wird ThreadProc erwartet oder NULL, wenn keine Parameter übergeben wwerden sollen.
Code:
WINAPI ist als __stdcall definiert.
HANDLE WINAPI CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); DWORD WINAPI ThreadProc( LPVOID lpParameter ); |
Re: Problem mit Threads
Zitat:
Die Speicheradresse hat man über den Parameter der Funktion, von da her ist es über eine lokale Variable möglich, da der Ort, auf den der Zeiger zeigt, nicht verloren geht. |
Re: Problem mit Threads
Ich habe deinen Code instgesamt 3x angwendet (also ausgeführt):
1: Ungültige Zeigeroperation, wegklickbar, kein Absturz 2: Ungültige Zeigeroperation, wegklickbar, Absturz 3: Ungültige Zeigeroperation, wegklickbar, Absturz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz