2010-06-05 5 views
2

Je veux avoir un std :: unordered_map global statique dans le cpp de mon point d'entrée pour mon serveur COM.global std :: unordered_map com problèmes de démarrage du serveur

Code d'en-tête pertinente:

typedef unordered_map<HWND,IMyInterface*> MyMapType; 

Organe concerné:

static MyMapType MyMap; 

void MyFunction(HWND hWnd, IMyInterface* pObj){ 
    MyMap[hWnd] = pObj; 
} 

HINSTANCE g_hInstModule = NULL; 
BOOL WINAPI DllMain (__in HINSTANCE hInstDLL, __in DWORD fdwReason, __in LPVOID lpvReserved) 
{ 
    if(fdwReason == DLL_PROCESS_ATTACH) 
    { 
     g_hInstModule = hInstDLL; 
     return true; 
    } 
    else if(fdwReason == DLL_PROCESS_DETACH) 
    { 
     return true; 
    } 
    return false; 
} 

MyCoClass::MyCoClass() 
{ 
    DRM_Refcount = 1; 
} 

HRESULT STDMETHODCALLTYPE MyCoClass::InitMyCoClass() 
{ 
    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 
    //replace with make window code 
    MyFunction(hWnd,ISomeInterface); 
    return S_OK; 
} 

La seule façon que je peux obtenir ce travail est d'être fait un pointeur map_type et la création d'une instance de map_type sur le tas et pointant dessus avec le pointeur global. :/

POURQUOI?

+0

Votre "code d'en-tête pertinent" ne peut pas être correct. 'unordered_map' est un template. Que voulez-vous dire par "la seule façon dont je peux obtenir ce travail est ..." Quelles erreurs obtenez-vous avec le code comme écrit si vous corrigez le typedef? –

+0

Eh bien, je ne suis pas sûr de savoir comment corriger la mise en forme du * modèle * HWND, IMyInterface * end_template * (comme il est là, il ne montre pas sur le post):/et je ne reçois pas d'erreurs comme ci-dessus compile et court et puis j'obtiens un peu de folie tout en essayant d'accéder à la carte. –

+0

Ahhh; J'ai corrigé le formatage pour vous. La mise en retrait des lignes sur quatre espaces entraîne leur rendu sous forme de code; aucune étiquette de pré ou de code n'est requise. –

Répondre

0

Vous devez modifier DllMain pour initialiser explicitement l'exécution C: http://support.microsoft.com/kb/814472

Rechercher « Modifier COM basée sur DLL »

objets statiques avec les constructeurs initialisés habituellement par le point d'entrée CRT qui, pour. exes appelle alors la fonction principale de votre programme. Avec les DLL, vous devez vous-même travailler.

Questions connexes