2009-06-26 19 views
7

Tengo un método estático, MyClass::myMethod() en otra DLL, MyDll.dll. En mi código, llamo a este método, y se compila y funciona bien.¿Por qué aparece un error de "función de miembro no presente" al evaluar expresiones en el depurador de VC++?

Pero cuando intento MyClass::myMethod() en la ventana inmediata (o la ventana de inspección), siempre me sale:

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

¿Por qué?

actualización: Me he dado cuenta de que cuando se utiliza la context operator funciona:

{,,MyDLL}MyClass::myMethod() 

No estoy realmente seguro de por qué se necesita, sin embargo, así que voy a esperar un poco para ver si alguien tiene una buena explicación.

Actualización 2: Me pidieron que dara más información. Desafortunadamente, lo que describí es casi todo lo que tengo. Esto es en código de terceros. El método, que reside en un archivo DLL diferente, se declara así:

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

y se invoca como esto:

MyClass::getDirectory() 

no tengo la fuente. Fue compilado en modo Debug bajo VC++ 9.

+0

Podríamos ver algo de código? – 0xC0DEFACE

+0

Parece que la ventana del reloj simplemente no es lo suficientemente inteligente y no puede ubicar la fuente para que se ejecute de esta manera. ¿Has intentado ajustar esta llamada con una función propia? Char * foo() {return MyClass :: getDir(); }? Podría funcionar de esta manera, ya que la fuente de MyClass se resolvería en tiempo de compilación en lugar de en tiempo de ejecución. – eran

+0

Entonces, ¿funciona ahora? – ralphtheninja

Respuesta

2

Bueno, no estoy seguro de por qué, pero el depurador no es lo suficientemente inteligente a saber que la clase está en otro archivo DLL, por lo que tiene que contar explicitamente mediante el uso de la context operator:

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

Luego aparece el error "No se puede evaluar la expresión". – newenglander

+0

Funcionó para mí (después de cargar el PDB para el módulo). ¡Gracias! – Cameron

0

Eso es probablemente porque su función estática se define en línea.

Mi prueba con esta clase:

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

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

me da este resultado en mi ventana inmediata:

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

@fretje No está en línea: esta clase en otra fuente cerrada, DLL. De hecho, logré que funcione (ver mi actualización), pero realmente no sé por qué. –

Cuestiones relacionadas