Alguien me explicaría que son estos codigos

Iniciado por naidmen, 13 Febrero 2017, 20:44 PM

0 Miembros y 1 Visitante están viendo este tema.

naidmen

string exe = "ELEXE";
    HRSRC res=FindResource(NULL,exe.c_str(),RT_RCDATA);

    if(res==NULL)
         cout << GetLastError();
         cout << "\n";

    int size=SizeofResource(NULL,res);

    if( !size )
        cout << 122; // Arbitrario. -> ERROR_INSUFFICIENT_BUFFER
        cout << "\n";

    HGLOBAL hRes=LoadResource(NULL,res);


Llevo casi 6 meses en lenguaje C de forma independiente, ya he visto: pilas,colas listas enlazadas y doblemente enlazadas y aun no se que significan esos códigos. Y si es posible alguien me pasaría una guía que este desde el principio para poder entenderlos.


Borito30

#1
Cita de: naidmen en 13 Febrero 2017, 20:44 PM
string exe = "ELEXE";
   HRSRC res=FindResource(NULL,exe.c_str(),RT_RCDATA);

   if(res==NULL)
        cout << GetLastError();
        cout << "\n";

   int size=SizeofResource(NULL,res);

   if( !size )
       cout << 122; // Arbitrario. -> ERROR_INSUFFICIENT_BUFFER
       cout << "\n";

   HGLOBAL hRes=LoadResource(NULL,res);


Llevo casi 6 meses en lenguaje C de forma independiente, ya he visto: pilas,colas listas enlazadas y doblemente enlazadas y aun no se que significan esos códigos. Y si es posible alguien me pasaría una guía que este desde el principio para poder entenderlos.



son muy parecidos a los mios esto va mas orientado a windows que a c++ aunque uses codigo en c++.
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

dato000

Cita de: naidmen en 13 Febrero 2017, 20:44 PM
string exe = "ELEXE";
    HRSRC res=FindResource(NULL,exe.c_str(),RT_RCDATA);

    if(res==NULL)
         cout << GetLastError();
         cout << "\n";

    int size=SizeofResource(NULL,res);

    if( !size )
        cout << 122; // Arbitrario. -> ERROR_INSUFFICIENT_BUFFER
        cout << "\n";

    HGLOBAL hRes=LoadResource(NULL,res);


Llevo casi 6 meses en lenguaje C de forma independiente, ya he visto: pilas,colas listas enlazadas y doblemente enlazadas y aun no se que significan esos códigos. Y si es posible alguien me pasaría una guía que este desde el principio para poder entenderlos.



Parece que va más de la mano con programación de windows, Visual C++

https://msdn.microsoft.com/es-es/library/windows/desktop/ms648042(v=vs.85).aspx

Sin conocer mucho la libreria, intentare traducir y explicar en lo que puede consistir esos recursos:

Citar
HRSRC WINAPI FindResource(
  _In_opt_ HMODULE hModule,
_In_     LPCTSTR lpName,
  _In_     LPCTSTR lpType
);

En el que:

Citar
Parameters

hModule [in, optional]
Type: HMODULE
A handle to the module whose portable executable file or an accompanying MUI file contains the resource. If this parameter is NULL, the function searches the module used to create the current process.

Maneja el modulo en el que un archivo ejecutable o un archivo MUI contiene el recurso solicitado. Si el parametro es NULL, la función busca un un modulo que es creado al momento de crearse el proceso actual.


lpName [in]
Type: LPCTSTR
The name of the resource. Alternately, rather than a pointer, this parameter can be MAKEINTRESOURCE(ID), where ID is the integer identifier of the resource. For more information, see the Remarks section below.

Es el nombre del recurso, puede ser un apuntador, o puede ser un ID, en ID es un valor entero para identificar el recurso.


lpType [in]
Type: LPCTSTR
The resource type. Alternately, rather than a pointer, this parameter can be MAKEINTRESOURCE(ID), where ID is the integer identifier of the given resource type. For standard resource types, see Resource Types. For more information, see the Remarks section below.

Es el tipo del recurso, puede ser un apuntador, o puede ser un ID, en ID es un valor entero para identificar el recurso.


Creeria que tienes un pequeño ejemplo, pueden encontrarse más claro, pero en ingles.

https://vctipsplusplus.wordpress.com/tag/findresource-call-is-failing-in-dll/
http://www.cplusplus.com/forum/general/54255/
https://www.codeproject.com/Questions/80910/FindResource-failing-to-return-handle
http://stackoverflow.com/questions/9646752/findresource-fails-to-find-data-even-though-data-is-in-exe
http://stackoverflow.com/questions/5807554/findresource-fails

Ahora, dependiendo de lo que necesites, pues tendrás que amoldar el ejemplo, pero bueno, básicamente lo veo de esta manera.

1) Instanciar un Objeto tipo HRSRC (ejm --> res)
2) Asignar ese objeto tipo HRSRC el metodo a ejecutar FindResource
3) FindResource Necesita: Un objeto tipo HMODULE, un ID donde se encuentre un recurso, y el tipo de referencia que tiene ese recurso.
4) SizeofResource y LoadResource son parecidas, necesitan el objeto HRSRC.

Se que es algo muy ambiguo, pero realmente se necesitaria estudiar a fondo Visual C++ y el funcionamiento del metodo, estudiando la libreria que lo contiene.

Espero que sirva de algo.