windows - instalar - se cargo el modulo pero no se encontro el punto de entrada dllinstall
Comando de Windows para saber si un archivo.dll es de 32 bits o de 64 bits. (3)
La capacidad que está buscando está disponible de forma nativa en sistemas UNIX; usa el comando ''file''. Puede usar ''archivo'' en sistemas Windows si instala Cygwin u otro de los emuladores UNIX.
Estoy buscando un comando en windows cmd para decirme si un determinado archivo dll es de 32 bits o 64 bits
¿Hay algo como esto en Windows?
Puede usar la biblioteca dbghelp para obtener los encabezados de las imágenes. Luego puede leer la información que necesita de FileHeader
.
Aquí hay un código de muestra. Por favor perdone el manejo de error bastante cojo. Simplemente lo dejé caer rápidamente para ilustrarlo, y ni siquiera estoy remotamente fluido en C ++.
#include <Windows.h>
#include <Dbghelp.h>
#include <string>
#include <iostream>
using namespace std;
bool GetImageFileHeaders(wstring fileName, IMAGE_NT_HEADERS &headers)
{
HANDLE fileHandle = CreateFile(
fileName.c_str(),
GENERIC_READ,
FILE_SHARE_READ,
nullptr,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);
if (fileHandle == INVALID_HANDLE_VALUE)
return false;
HANDLE imageHandle = CreateFileMapping(
fileHandle,
nullptr,
PAGE_READONLY,
0,
0,
nullptr
);
if (imageHandle == 0)
{
CloseHandle(fileHandle);
return false;
}
void *imagePtr = MapViewOfFile(
imageHandle,
FILE_MAP_READ,
0,
0,
0
);
if (imagePtr == nullptr)
{
CloseHandle(imageHandle);
CloseHandle(fileHandle);
return false;
}
PIMAGE_NT_HEADERS headersPtr = ImageNtHeader(imagePtr);
if (headersPtr == nullptr)
{
UnmapViewOfFile(imagePtr);
CloseHandle(imageHandle);
CloseHandle(fileHandle);
return false;
}
headers = *headersPtr;
UnmapViewOfFile(imagePtr);
CloseHandle(imageHandle);
CloseHandle(fileHandle);
return true;
}
int main(int argc, char* argv[])
{
IMAGE_NT_HEADERS headers;
if (GetImageFileHeaders(L"C://windows//system32//user32.dll", headers))
{
if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
cout << "x86";
else if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_IA64)
cout << "IA64";
else if (headers.FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
cout << "x64";
else
cout << "Machine not recognised";
}
return 0;
}
Para vincular esto, necesita agregar dbghelp.lib
a las dependencias adicionales de su proyecto. Para obtener más información acerca de los detalles detrás de esto, consulte la documentación de MSDN para las diversas llamadas a API que se utilizan.
DUMPBIN
se incluye con Visual C ++ y puede proporcionar esta información con el /HEADERS
.
Ejemplo de salida de una imagen de 32 bits:
FILE HEADER VALUES
14C machine (i386)
6 number of sections
306F7A22 time date stamp Sun Oct 01 22:35:30 1995
0 file pointer to symbol table
1D1 number of symbols
E0 size of optional header
302 characteristics
Executable
32 bit word machine
Debug information stripped