Es decir, usar un delete en lugar de Release?
por cierto: gracias por la respuesta :)
por cierto: gracias por la respuesta :)
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menu
map <input_device, LPDIRECTINPUTDEVICE8> diDevice;
void unacquire_devs ()
{
map <input_device, LPDIRECTINPUTDEVICE8>::iterator Pos;
for (Pos = diDevice.begin (); Pos != diDevice.end (); ++Pos)
{
cout << "Unacquiring dev " << Pos->first << endl;
if (Pos->second != NULL)
Pos->second->Unacquire ();
}
}
void acquire_devs ()
{
map <input_device, LPDIRECTINPUTDEVICE8>::iterator Pos;
for (Pos = diDevice.begin (); Pos != diDevice.end (); ++Pos)
Pos->second->Acquire ();
}
LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window
UINT uMsg, // Message For This Window
WPARAM wParam, // Additional Message Information
LPARAM lParam) // Additional Message Information
{
switch (uMsg) // Check For Windows Messages
{
case WA_INACTIVE:
{
unacquire_devs ();
}
case WM_ACTIVATE: // Watch For Window Activate Message
{
acquire_devs ();
}
// ...
bool release_dev (input_device Dev)
{
if (diDevice [Dev] != NULL)
{
diDevice [Dev]->Unacquire ();
diDevice [Dev]->Release ();
diDevice [Dev] = NULL;
return true;
}
return false;
}
void destroy_dx ()
{
map <input_device, LPDIRECTINPUTDEVICE8>::iterator Pos;
unacquire_devs ();
for (Pos = diDevice.begin (); Pos != diDevice.end (); ++Pos)
release_dev (Pos->first);
if (DXInputObj != NULL)
{
DXInputObj->Release ();
DXInputObj = NULL;
}
}
bool open_dev (input_device Dev)
{
GUID DevGUID;
LPCDIDATAFORMAT DevDataFormat;
DIPROPDWORD Props;
DWORD CopLevel;
if (diDevice [Dev] != NULL)
return true;
switch (Dev)
{
case device_keyboard:
DevGUID = GUID_SysKeyboard;
DevDataFormat = &c_dfDIKeyboard;
CopLevel = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
break;
case device_mouse:
DevGUID = GUID_SysMouse;
DevDataFormat = &c_dfDIMouse;
CopLevel = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
break;
case device_joystick0:
case device_joystick1:
case device_joystick2:
case device_joystick3:
case device_joystick4:
case device_joystick5:
case device_joystick6:
case device_joystick7:
if (AvailJoy.find (Dev) == AvailJoy.end ())
{
seterror ("open_dev: Attempt to open an unavailable joystick");
return false;
}
DevGUID = AvailJoy [Dev];
DevDataFormat = &c_dfDIJoystick2;
CopLevel = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
break;
default:
seterror ("open_dev: Attempt to open an unknown device type");
return false;
}
hr = DXInputObj->CreateDevice (DevGUID, &diDevice [Dev], NULL);
if (FAILED(hr))
{
seterror ("open_dev: could not open DirectInput 8 Device");
return false;
}
diDevice [Dev]->SetDataFormat (DevDataFormat);
diDevice [Dev]->SetCooperativeLevel(hWnd, CopLevel);
//We are using Buffered input
Props.diph.dwSize = sizeof(DIPROPDWORD);
Props.diph.dwHeaderSize = sizeof(DIPROPHEADER);
Props.diph.dwObj = 0;
Props.diph.dwHow = DIPH_DEVICE;
Props.dwData = _input_buffer_size;
hr = diDevice [Dev]->SetProperty (DIPROP_BUFFERSIZE, &Props.diph);
if (FAILED(hr))
{
seterror ("open_dev: could not set buffered device");
return false;
}
diDevice [Dev]->Acquire();
return true;
}
template <class T> class ClassMan
{
private:
vector <T *>MyLst;
public:
ClassMan () {};
~ClassMan () {clear ();};
T *create ()
{
T *Tmp = new T;
if (Tmp != NULL)
MyLst.push_back (Tmp);
return Tmp;
};
void release (T *ClassPtr)
{
vector <T *>::iterator Pos;
Pos = find (MyLst.begin (), MyLst.end (), ClassPtr);
if (Pos != MyLst.end ())
{
delete (*Pos);
MyLst.erase (Pos);
}
};
void clear ()
{
vector <T *>::iterator Pos;
Pos = MyLst.begin ();
while (Pos != MyLst.end ())
{
(*Pos)->clear ();
delete (*Pos);
++Pos;
}
MyLst.clear ();
};
};
G:/yge/yg_sdk/include/YG/yg_classman.h: In member function `void ClassMan<T>::release(T*)':
G:/yge/yg_sdk/include/YG/yg_classman.h:62: error: expected `;' before "Pos"
G:/yge/yg_sdk/include/YG/yg_classman.h:64: error: `Pos' was not declared in this scope
Cita de: "aguspiza"Pues si tienes curiosidad y sabes un poquito de ingles aqui hay algunas razones de por que:
http://www.swig.org/Doc1.3/Python.html#Python_nn10
http://www.swig.org/Doc1.3/Python.html#Python_nn11
http://en.wikipedia.org/wiki/Position_independent_code
Basicamente es que la arquitectura AMD64 en Linux necesita codigo relocalizable (relocalizable sin necesidar de ejecutar un setup). Por cierto recuerda linkar a /usr/lib64 si haces librerias para AMD64
P.D: Este es mi primer mensaje por aqui, asi que aprovecho para saludar. Me he registrado para intentar hacer un prototipo de juego con CRM32Pro antes de que se lance metaplace y poder ir avanzando algo. Estaba intentando hacerme el wrapper con swig para python y por eso di con esta informacion :wink:
/usr/bin/ld: ./obj/yg_aux.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
glOrtho(0, Width, Height, 0, 0, 1);
glOrtho (0 , ScrWidth, 0, ScrHeight, DrawNearDistance, DrawFarDistance);
Cita de: "phantom"
Si le añado un thread, el thread se ejecuta 1 sola vez:
¿como puedo hacer para que se ejecute varias veces?
mLog->write(2,"[CMultiThreading]-> added a Thread with the following name: %s & data: %s",THREADName, THREADData);
Cita de: "tamat"no, si ya las tengo estaticas, yo quiero juntarlas todas en una por evitar que el que cree un proyecto tenga que poner en la lista de librerias con las que linkar todas las que uso, que son casi unas 10.