Static miembros de una clase en una dll‏

23/09/2010 - 11:33 por Josemi | Informe spam
¡Hola!

Me ha pasado un caso curioso con una clase que tiene un miembro
static definida en una dll. Me explico

dll.h

class __declspec (dllexport) A
{
public:
static int valor;

PinrtOut ()
{
TRACE1(valor);
}
}

dll.cpp
A::valor#;

main.h
class B:A
{
}

main.cpp
A::valor;
{
A objeto;

objeto.valor = 34;
objeto.PrintOut();
}

Bien, sucede que el valor dado en "main.cpp" valor objeto.valor = 34
cuando entra en PrintOut ésta imprime 23

¿Se te ocurre a que es debido? aunque tengo alguna idea y el problema
radica en que estoy obligado a declarar A::valor en las dos rutinas y
claro el compilador crea dos instancias de A::valor ¿se podría hacer
que él solo viera una? o alguna idea de como solventar este problema.
Se me ocurren definir rutinas que suplan esta deficiencia, pero yo
buscaba algo menos complicado.


Un millón de gracias

Josemi

Preguntas similare

Leer las respuestas

#1 Cholo Lennon
27/09/2010 - 19:25 | Informe spam
On 23/09/2010 06:33, Josemi wrote:
¡Hola!




Primero, como te dijo Joseph Newcomer en el foro de MFC no es bueno,
exportar atributos, es preferible crear setters/getters para los mismos.
Ahora, si decides continuar entonces:


Me ha pasado un caso curioso con una clase que tiene un miembro
static definida en una dll. Me explico

dll.h

class __declspec (dllexport) A
{



Debes crear una macro para exportar/importar la clase sino el programa
que consume la DLL no podra acceder a los datos exportados.


public:
static int valor;

PinrtOut ()
{
TRACE1(valor);
}
}

dll.cpp
A::valor#;

main.h
class B:A
{
}

main.cpp

A::valor;


Esto no es necesario si la DLL esta siendo "importada" correctamente.


{
A objeto;

objeto.valor = 34;
objeto.PrintOut();
}

Bien, sucede que el valor dado en "main.cpp" valor objeto.valor = 34
cuando entra en PrintOut ésta imprime 23

¿Se te ocurre a que es debido? aunque tengo alguna idea y el problema
radica en que estoy obligado a declarar A::valor en las dos rutinas y
claro el compilador crea dos instancias de A::valor ¿se podría hacer
que él solo viera una? o alguna idea de como solventar este problema.
Se me ocurren definir rutinas que suplan esta deficiencia, pero yo
buscaba algo menos complicado.


Un millón de gracias

Josemi




En el grupo de MFC te publico la macro.


Saludos


Cholo Lennon
Bs.As.
ARG
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida