v 2.1.38 - Enginge.GetOnAir Access Violation

Hi Torben,

Da ich im “2.1.38 Bugs” Thread nicht st(h)ören will, mache ich einen eigenen auf.

Beim ausführen des folgenden Scripts bekomme ich in v2.1.38 ich eine access violation:

[code]begin
if (Engine.GetOnAir) then
SystemLog(‘hallo’);
end.

[/code]

Runtime error: (2,1) Access violation at adress 004076C3 in Module 'mairlist.exe'. Read of address 00000000

Is it a bug? :wink:

grüße, michi

Merkwürdig, hier geht’s.

Auf welche Weise startest du das Script?

Dieses Script starte ich per öffnen —> Script ausführen.

im Gesamten ist es in diesem Notification-Script verbaut:

[code]//Stand: august 07, Michael Schäl, radio StHörfunk
//die pfade der scripts sowie die schlüsselwörter für die suche müssen geändert werden.

procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
var jingleImPlayer:boolean;
aktuelleStunde: integer;

begin
//hier wird geprüft, ob in einem Player werbung oder jingle ist
jingleImPlayer:=false;
if ((pos(‘Jingle’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Werbung’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Promo’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Allgemein’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Closer’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘KWE’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘News’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Reini’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Sommer’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Verkehr’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Trenner’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Werbespot’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Weihnachten’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Wetter’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘Wochenende’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘nachrichten’, PlayerControl.GetItem.GetTitle) <> 0) or (pos(‘AV’, PlayerControl.GetItem.GetTitle) <> 0))then
jingleImPlayer:=true;
aktuelleStunde:= StrToInt(FormatDateTime(‘hh’, now));
if (jingleImPlayer=false) and (CurrentPlaybackControl.GetAutomation) and (Engine.GetOnAir=false) then begin
if (DayOfWeek(now) = 1) or (DayOfWeek(now)=7) then
RunScript(‘D:\Scripts\wochenende.mls’)
else if (aktuelleStunde>=6) and (aktuelleStunde<=9) then
RunScript(‘D:\Scripts\morgen.mls’)
else if (aktuelleStunde>=10) and (aktuelleStunde<=13) then
RunScript(‘D:\Scripts\mittag.mls’)
else if (aktuelleStunde>=14) and (aktuelleStunde<=24) then
RunScript(‘D:\Scripts\abend.mls’)
else if (aktuelleStunde>=0) and (aktuelleStunde<=6) then
RunScript(‘D:\Scripts\abend.mls’)
end;
end;

begin
end.
[/code]

Habe es gerade auf einem “jungfräulichen” mAirList ausprobiert und auch den Fehler bekommen… (also jungfräulich im sinne von nach dem entpacken die Konfiguration nicht verändert :wink: )

Das ist aber sehr komisch, denn bei Thomas, für den das Script ist, kommt der Fehler auch…

grüße, michi

Probier mal bitte, ob dieses minimalistische Script auch schon besagte Fehlermeldung erzeugt:

begin Engine; end.

Wenn ja, dann probier auch bitte mal das “leere Script”:

begin end.

Offenbar handelt es sich hier um einen Fehler, der mit dem Erzeugen bzw. Freigeben von Objekten aus Scripts heraus zusammenhängt.

Hi Torben,

Beide von dir geposteten Scripts erzeugen keine Fehlermeldungen…

Das oben gepostete Script funktioniert auch, wenn ich diese die Abfrage des OnAir-status rausmache (also in der IF-anweisung " and (Engine.GetOnAir=false)" rauslösche…

Scheint etwas tricky :wink:
Hast du sonst noch eine Idee?

grüße, michi

Nimm bitte nochmal ein “minimales” Script, das einen Fehler erzeugt (also z.B. das mit dem GetOnAir) und probiere es mit dieser .exe hier aus: http://temp.weibert.de/debug.zip

Das ist eine spezielle mAirList.exe, die zusätzliche Debug-Informationen enthält (und dadurch ziemlich groß wird, nicht wundern!). Wenn du das Script über “Open -> Run Script” ausführst und der Fehler auftritt, müsste eine Dialogbox erscheinen, die neben der Fehlermeldung auch den Call Stack enthält. Du kannst die Daten dann in die Zwischenablage kopieren und hier reinstellen.

Danke :slight_smile:

Hi,

hier ist die Fehlermeldung:

[code]Runtime error: (2,1) Access violation at address 004076C3 in module ‘mAirList.exe’. Read of address 00000000

Program Version 2.1.38 Build 417

Call stack:

[006C175A] mAirListScript.TmAirListScript.CompileAndExecute (Line 113, “mAirListScript.pas” + 3) + $5D
[006B5CF9] Engine.TmAirListEngine.RunScript (Line 664, “Engine.pas” + 4) + $3
[0083324A] Main.TMainForm.acRunScriptExecute (Line 1675, “Main.pas” + 5) + $1F
[0042E527] Classes.TBasicAction.Execute + $F
[00481A59] ActnList.TContainedAction.Execute + $31
[00482720] ActnList.TCustomAction.Execute + $50
[0042E3F3] Classes.TBasicActionLink.Execute + $13
[00467B28] Menus.TMenuItem.Click + $90
[00469043] Menus.TMenu.DispatchCommand + $13
[0046A1A2] Menus.TPopupList.WndProc + $82
[0046A0F1] Menus.TPopupList.MainWndProc + $1D
[0042EBC8] Classes.StdWndProc + $14
[00490E90] Forms.TApplication.ProcessMessage + $FC
[00490ECA] Forms.TApplication.HandleMessage + $A
[004910EA] Forms.TApplication.Run + $96
[0086A4D4]
[/code]

Fehler gefunden. Aus irgendeinem Grund war eine alte Quelldatei in den Sourcecode gerutscht, die für die Zuordnung der Script-Funktionen verantwortlich ist.

Ich seh zu, dass ich fix eine .39 rausbringe.

Alles klar, Danke :slight_smile:

grüße, michi

Eine aktuelle .exe liegt ansonsten schonmal hier: http://www.mairlist.com/download/mAirList/v2.1/snapshot/

ohh :slight_smile: Danke… und jetzt funktioniert es auch. :slight_smile:

grüße, michi

Ok. Musst du nur solange mit der englischen GUI leben :wink:

Das werde ich überleben :slight_smile: