Je souhaite que mon application C# exécute conditionnellement une méthode native, en choisissant conditionnellement d'exécuter la version x86 ou x64 de la DLL. Chaque fois que je tente de charger le fichier DLL 32 bits je reçois l'erreur suivante:Chargement d'une DLL 32 bits dans un processus 64 bits
Unhandled Exception: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at <exeName>.MiniDumpMethods.MiniDumpWriteDumpX86(IntPtr hProcess, UInt32 processId, SafeHandle hFile, MINIDUMP_TYPE dumpType, IntPtr expParam, IntPtr userStreamParam, IntPtr callbackParam)
contexte de fond: Je veux que mon binaire pour prendre une image mémoire d'un processus donné. Selon que le processus est en train de prendre un vidage mémoire de 32 ou 64 bits, il choisira d'exécuter la méthode MiniDumpwriteDump à partir de la version x86 ou x64 de dbghelp.dll.
Je suis actuellement faire ce qui suit:
[SuppressUnmanagedCodeSecurity]
internal static class MiniDumpMethods
{
[DllImport("dbghelp.dll",
EntryPoint = "MiniDumpWriteDump",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool MiniDumpWriteDump(
IntPtr hProcess,
uint processId,
SafeHandle hFile,
MINIDUMP_TYPE dumpType,
IntPtr expParam,
IntPtr userStreamParam,
IntPtr callbackParam);
[DllImport("dbghelpx86.dll",
EntryPoint = "MiniDumpWriteDump",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool MiniDumpWriteDumpX86(
IntPtr hProcess,
uint processId,
SafeHandle hFile,
MINIDUMP_TYPE dumpType,
IntPtr expParam,
IntPtr userStreamParam,
IntPtr callbackParam);
}
Toute idée comment je peux charger conditionnellement soit x86 ou la version 64 bits de la dll?
(Note: dbghelpx86.dll est la version x86 de dbghelp.dll que je renomme)
Merci de
Vous pouvez vérifier si IntPtr.Size est 4 ou 8 pour voir si le système d'exploitation hôte est 32 bits ou 64 bits –
@MatiCicero Il ne s'agit pas du système d'exploitation hôte. La décision doit être prise par processus –