AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ConitializeEx schlägt fehlt

Ein Thema von EWeiss · begonnen am 18. Jun 2014 · letzter Beitrag vom 20. Jun 2014
Antwort Antwort
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.667 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: ConitializeEx schlägt fehlt

  Alt 18. Jun 2014, 20:47
Hi,

ich habe eine Vermutung, basierend auf einem aehnlichen Problem, das ich selbst mal hatte:

http://stackoverflow.com/questions/2...r-when-started

Kann es sein, dass Du in der IDE zusaetzliche Environment-Variablen definiert hast?
Ich habe zwar bis heute nicht herausgefunden, weshalb das ein Problem war, aber nachdem ich die Variablen geloescht hatte, funktionierte wieder alles.

twm
Thomas Mueller
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: ConitializeEx schlägt fehlt

  Alt 18. Jun 2014, 21:09
Hi,

ich habe eine Vermutung, basierend auf einem aehnlichen Problem, das ich selbst mal hatte:

http://stackoverflow.com/questions/2...r-when-started

Kann es sein, dass Du in der IDE zusaetzliche Environment-Variablen definiert hast?
Ich habe zwar bis heute nicht herausgefunden, weshalb das ein Problem war, aber nachdem ich die Variablen geloescht hatte, funktionierte wieder alles.

twm
Danke.

Nein verwende keine.

Hab schon so vieles versucht aber kein Erfolg bisher.
Ich verwende CoCreateInstance in meiner DLL
Verwende ich ConitializeEx bevor die DLL initialisiert wird also so..

Delphi-Quellcode:
var
  hr : HRESULT;

begin
  hr := CoInitializeEx(nil, COINIT_MULTITHREADED);
  if hr = S_OK then
  begin
    DLLProc := @LibraryProc;
    DLLProc(DLL_PROCESS_ATTACH);
  end;
end.
Hängt sich die Anwendung VCL auf sobald ich auf irgendeinen Button klicke.
Höchstwahrscheinlich weil die Komponente TOpenDialog sich auf der Form befindet.
Bei der Nonvcl nur dann wenn ich den Dialog anspreche.

Wenn ich CoInitializeEx weg lasse funktioniert alles bis auf das Plugin Morphyre (um das es eigentlich geht).
Hier kracht es dann.. bei RenderWindowed.

Delphi-Quellcode:
function TWMPHelper.RenderWindowed(var pData: TimedLevel;
  fRequiredRender: Bool): Bool;

begin
  result := false;

  if Assigned(_IWmpEffects2) then
  try
    if _IWmpEffects2.RenderWindowed(pData, fRequiredRender) = S_OK then
      result := true;
  except
    result := false;
  end;

end;

irgendwas ist das faul.. finde es nicht.

gruss

Geändert von EWeiss (18. Jun 2014 um 21:16 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: ConitializeEx schlägt fehlt

  Alt 19. Jun 2014, 17:16
Mein Problem ist das selbe wie hier!

https://groups.google.com/forum/#!to...sc/tntbzL66s68

So wie ich das sehe muss ich dann die Com Objekte innerhalb der Anwendung selbst erstellen
aber das ist was ich eigentlich nicht wollte
Die Anwendung soll eigentlich nichts von den Interfaces IWMPEffect und IWMPEffect2 wissen.
Das ist ja der sinn der DLL.

Nun ja muss mal sehn

Dafür..
CoMarshalInterThreadInterfaceInStream

kann ich nichts vernünftiges finden.
Ich kann zwar das Interface in den Stream packen nur wie arbeitet man dann weiter im verlauf mit dem Stream?
Denn die Rückgabe von IStream(myInterfacePointer) ist ja nur ein Pointer.


gruss

Geändert von EWeiss (19. Jun 2014 um 19:27 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: ConitializeEx schlägt fehlt

  Alt 20. Jun 2014, 00:30
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

Geändert von EWeiss (11. Jul 2019 um 16:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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 by Thomas Breitkreuz