Hmm..
Um eine Applikation direkt mit COINIT_MULTITHREADED zu starten, genügt eigendlich folgendes:
In der Projekt
DPR :
uses
ActiveX,
ComObj,
...
und dann vor dem Application.Initialize; :
CoInitFlags := COINIT_MULTITHREADED;
Application.Initialize;
Damit sollte die (
VCL) Applikation direkt als MULTITHREADED initialisiert werden.
(So geht es zumindestens unter D6
)
Mag unter
VCL so gehen aber nicht mit
NonVcl.
Aber gut zu wissen wenn es geht
EDIT:
Wenn ich das mache in meiner
DPR..
Delphi-Quellcode:
var
HR: HRESULT;
begin
HR := CoInitializeEx(
nil, COINIT_MULTITHREADED);
if HR <> S_OK
then
raise Exception.Create('
Error : Unable to initialize Component Object Model');
WinMain(hInstance, 0,
nil, 0);
Dann schlägt CoInitializeEx fehl.
Ich muss quasi den von Delphi erstellten APARTMENTTHREADED erst mal beende.
Das ist aber ein Unart wenn Delphi das von sich aus macht.
Aber auch dann funktionieren die Events nicht.
function TAudioSessionNotification.OnSessionCreated(const NewSession: IAudioSessionControl): HResult;
Und dein Beispiel funktioniert nicht mit D2010.
Delphi-Quellcode:
program AudioVolumeAdj_Eng;
uses
Forms,
ActiveX,
ComObj,
VolumeTest_Eng
in '
VolumeTest_Eng.pas'
{Form1},
AudioVolume
in '
..\AudioVolume.pas';
{$R *.res}
begin
CoInitFlags := COINIT_MULTITHREADED;
Application.Initialize;
// Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
gruss