Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » atl probleme in einer dll

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.10.2006, 14:05 Uhr
pitrie



hi,

ich habe da ein kleines problem!
ich will aus einer dll eine verbindung zu einem com-server erstellen.
zuhilfe nehme ich die atl von visual studio 8

übrigens starte ich die verbindung über einen funktionsaufruf von außerhalb (funktion ist declexport!)

jedoch bleibt der prozess immer hängen.
beim debuggen bleibt bei folgender funktion der debugger stehen (die variableninfomationen im auto-fenster verschwinden einfach)


Code:
__checkReturn HRESULT CoCreateInstance(__in LPCOLESTR szProgID, __in_opt LPUNKNOWN pUnkOuter = NULL, __in DWORD dwClsContext = CLSCTX_ALL) throw()
    {
        CLSID clsid;
        HRESULT hr = CLSIDFromProgID(szProgID, &clsid);
        ATLASSERT(p == NULL);
        if (SUCCEEDED(hr))
            hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&p);
        return hr;
    }


und zwar immer bei dem CoCreateInstance! (aus der datei atlcomcli.h)
dies ist der gleiche code, der bei einer exe-applikation funktioniert hat! liegt es an der dll? also probleme mit dll und atl?

kann mir das jemand erklären?

gruß
steff
--
Gruß Steff
___
Der Optimist sieht in jedem Problem eine Aufgabe.
Der Pessimist sieht in jeder Aufgabe ein Problem.
http://autoexport.sunbird-kalender.de

Dieser Post wurde am 22.10.2006 um 14:06 Uhr von pitrie editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.10.2006, 15:04 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Bist du sicher das er da hängen bleibt? CoCreateInstance baut ja eine Verbindung zu dem COM Server aus, vielleicht dauert es einfach nur länger. Wie lange hast du denn da gewartet?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.10.2006, 15:11 Uhr
pitrie



er bleibt da auf jedenfall hängen ....

ich habe einmal bestimmt 5 min gewartet mit der hoffnung, dass es noch geht! aber er macht einfach nichtsmehr!

ein kollege meint, dass es vielleicht an dem handler liegen kann! dass er bei dem dll aufruf noch in dem aufrufenden kontex ist! kann das vielleicht sein? ich glaube es eher nicht, aber mhh...!

oder an der atl version? falsche initialisierung?

das ist die init in der dll


C++:
class ATLinit
{
public:
  ~ATLinit();

  static ATLinit& Instance( HMODULE hModule);

private:
  ATLinit( HMODULE hModule);

  HRESULT mInit;
};

#define INIT_ATL( h) static ATLinit& init = ATLinit::Instance( h);

ATLinit::ATLinit( HMODULE hModule)
{
#if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM)
  DWORD dwCoInit = COINIT_APARTMENTTHREADED;
  mInit = ::CoInitializeEx( NULL, dwCoInit);
#else
  mInit = ::CoInitialize( NULL);
#endif

  _Module.Init( NULL, hModule);
}

ATLinit::~ATLinit()
{
  _Module.Term();

  if ( SUCCEEDED( mInit))
  {
    ::CoUninitialize();
  }
}

ATLinit& ATLinit::Instance( HMODULE hModule)
{
  static ATLinit init( hModule);

  return init;
}

--
Gruß Steff
___
Der Optimist sieht in jedem Problem eine Aufgabe.
Der Pessimist sieht in jeder Aufgabe ein Problem.
http://autoexport.sunbird-kalender.de

Dieser Post wurde am 22.10.2006 um 15:36 Uhr von pitrie editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.10.2006, 16:07 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Wieso ist der Konstruktor denn private? Mach den mal public
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.10.2006, 16:12 Uhr
pitrie



wozu denn das?

da wird über die funktion Instance ein Singleton erstellt. warum solll da der Konstructor public sein?
--
Gruß Steff
___
Der Optimist sieht in jedem Problem eine Aufgabe.
Der Pessimist sieht in jeder Aufgabe ein Problem.
http://autoexport.sunbird-kalender.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.10.2006, 22:14 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hast du mal geschaut ob die Initialisierung auch klappt bei CoInitializeEx? evtl schlägt die Fehl aus irgendeinem grund und bleibt daher in CoCreateInstance hängen. Oder geht er wirklich ERST in die Initialisierung und dann in CoCreateInstance? Evtl ruft er die in falscher Reihenfolge auf? Oder wird versehentlich aus irgendeinem Grund das Objekt deinitialisiert?


Zitat von MSDN:

Because there is no way to control the order in which in-process servers are loaded or unloaded, it is not safe to call CoInitialize, CoInitializeEx, or CoUninitialize from the DllMain function.


Wie gesagt, evtl falsche Reihenfolge?


Hier hat jemand das gleiche Problem:

www.thescripts.com/forum/thread281040.html

bzw.

www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2004-04/0596.html

Der Link hier klingt daraus interessant, das dürfte dein Problem erzeugen/lösen:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q305723

der tech-archive-Link klingt sehr interessant, schau dir da auch mal die anderen Posts an, dürfte an dein Problem rankommen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.10.2006, 18:45 Uhr
pitrie



super .... VIIIIIIEEEEELLLENNNN DANK

das war das problem.

hatte es zwar nicht in der dll aufgerufen, aber die funktion die es initialisiert, habe ich aus einer anderen dll in der dllmain aufgerufen.

da die init von atl nochmals alle dllmain aufruft, gibt es probleme, wenn du noch in einer drinne bist. dann gibt er kein return.

klasse
danke

gruß
steff
--
Gruß Steff
___
Der Optimist sieht in jedem Problem eine Aufgabe.
Der Pessimist sieht in jeder Aufgabe ein Problem.
http://autoexport.sunbird-kalender.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: