Nach vielen hin und her habe ich dann schlussendlich doch noch die Lösung gefunden.
Falls es jemand interessiert hier die Lösung.
Delphi-Quellcode:
BASSVISKIND_WMP:
begin
if BASSVIS_InitCom(mVisParam.Kind, 0{COINIT_MULTITHREADED}) = 0 then
begin
mExec.WMP_PluginIndex := PlgSelectedIndex-1;
mExec.WMP_PresetIndex := PlgSelectedPreset;
mExec.WMP_SrcVisHandle := PlgWinhandle;
mExec.Left := 0;
mExec.top := 0;
mExec.Width := rw.Right-rw.Left;
mExec.Height := rw.Bottom - rw.Top;
BASSVIS_ExecutePlugin(@mExec, mVisParam);
if BASSVIS_InitCom(mVisParam.Kind, 2{COINIT_APARTMENTTHREADED}) = 0 then
begin
if mVisParam.Vishandle <> 0 then
begin
if ckRenderDevice.GetCheckButtonStatus(ckRenderDevice.Handle) = TRUE then
begin
BASS_RecordInit(0);
BASSVIS_StartRecord(@mVisParam);
end else
begin
if gnAudioChannel <> 0 then
begin
BASSVIS_RenderChannel(@mVisParam, gnAudioChannel, false);
// Playstatus zum Plugin senden
BASSVIS_SetPlayState(@mVisParam, psPlay);
end;
end;
// FFT Value
FFTValue := trbSpectrum.GetTrackValue(trbSpectrum.Handle);
BASSVIS_SetOption(@mVisParam, BASS_VIS_CONFIG_FFTAMP, FFTValue);
BASSVIS_SetModulePreset(@mVisParam, PlgSelectedPreset);
end;
end;
end;
end;
bevor ich das Plug-In starte initialisiere ich das
Com Object aus der Anwendung heraus.
if BASSVIS_InitCom(mVisParam.Kind, 0{COINIT_MULTITHREADED}) = 0 then
nach dem ausführen direkt wieder zurück damit es keine Probleme mit den ComDialogen gibt
diese vertragen nun mal kein MULTITHREADED.. deshalb hängt es dann wenn man Dateien addieren will.
if BASSVIS_InitCom(mVisParam.Kind, 2{COINIT_APARTMENTTHREADED}) = 0 then
Für den ganze Kram hab ich einfach ne neue Funktion angelegt.
Delphi-Quellcode:
function BASSVIS_InitCom(Kind: TBASSVIS_KIND_T; coInit: Integer): HRESULT; stdcall;
begin
Result := S_FALSE;
if (Kind <> BASSVISKIND_WMP) then
Exit;
Result := BASSWMPVisAPI.WMPVIS_InitCom(coInit);
end;
Delphi-Quellcode:
function TBassWMPVisAPI.WMPVIS_InitCom(coInit: Integer): HRESULT;
begin
CoUninitialize;
result := CoInitializeEx(nil, coInit);
end;
geht jetzt mit
Nonvcl/
VCL und auch mit VB6 die anderen hab ich noch nicht getestet
sollte aber auch kein Problem sein.
gruss