2009-06-26 11 views
7

Ho un metodo statico, MyClass::myMethod() su un'altra DLL, MyDll.dll. Nel mio codice, chiamo questo metodo, e compila e gira bene.Perché viene visualizzato un errore di "funzione membro non presente" durante la valutazione di espressioni sul debugger VC++?

Ma quando provo MyClass::myMethod() nella finestra immediata (o finestra di controllo), ho sempre arrivare:

MyClass::myMethod() 
CXX0052: Error: member function not present 

Perché?

Aggiornamento: ho scoperto che quando uso il context operator funziona:

{,,MyDLL}MyClass::myMethod() 

Io non sono davvero sicuro perché ce n'è bisogno, però, così ho intenzione di aspettare un po ' per vedere se qualcuno ha una bella spiegazione

Aggiornamento 2: mi è stato chiesto di fornire ulteriori informazioni. Sfortunatamente, quello che ho descritto è quasi tutto ciò che ho. Questo è nel codice di terze parti. Il metodo, che risiede su una DLL diversa, è dichiarato in questo modo:

class MyClass 
{ 
public: 
// ... 
_declspec(dllimport) static const char *getDirectory(void); 
} 

ed è invocato in questo modo:

MyClass::getDirectory() 

non ho la fonte. E 'stato compilato in modalità Debug sotto VC++ 9.

+0

Potremmo vedere qualche codice? – 0xC0DEFACE

+0

Sembra che la finestra di controllo non sia abbastanza intelligente e non sia in grado di localizzare la sorgente per funzionare in questo modo. Hai provato a completare questa chiamata con una funzione propria - char * foo() {return MyClass :: getDir(); }? Potrebbe funzionare in questo modo, poiché l'origine di MyClass verrebbe risolta in fase di compilazione anziché in fase di esecuzione. – eran

+0

Quindi, funziona ora? – ralphtheninja

risposta

2

Beh, io non sono sicuro perché, ma il debugger non è abbastanza intelligente sapere che classe è in un altro DLL, quindi bisogna dire esplicitamente esso utilizzando la context operator:

{,,MyDLL}MyClass::myMethod() 
+0

Quindi viene visualizzato l'errore "Impossibile valutare l'espressione". – newenglander

+0

Ha funzionato per me (dopo aver caricato il PDB per il modulo). Grazie! – Cameron

0

Probabilmente è perché la funzione statica è definita in linea.

Il mio test con questa classe:

class myclass 
{ 
public: 
    static int inlinetest() 
    { 
     return 0; 
    } 
    static int test(); 
}; 

int myclass::test() 
{ 
    return 0; 
} 

mi dà questa uscita nella mia finestra immediata:

myclass::inlinetest() 
CXX0052: Error: member function not present 
myclass::test() 
0 
+0

@fretje Non è in linea - questa classe in un altro, closed source, DLL. In realtà sono riuscito a farlo funzionare (vedi il mio aggiornamento), ma non so davvero perché. –

Problemi correlati