Maison > développement back-end > Tutoriel Python > Pourquoi mon code Python ctypes renvoie-t-il une OSError : [WinError 193] %1 n'est-il pas une application Win32 valide lors du chargement d'une DLL ?

Pourquoi mon code Python ctypes renvoie-t-il une OSError : [WinError 193] %1 n'est-il pas une application Win32 valide lors du chargement d'une DLL ?

Susan Sarandon
Libérer: 2024-11-28 19:47:14
original
643 Les gens l'ont consulté

Why does my Python ctypes code throw an OSError: [WinError 193] %1 is not a valid Win32 application when loading a DLL?

Erreur Python LoadDLL : la tentative de chargement de la DLL renvoie OSError : [WinError 193] %1 n'est pas une application Win32 valide

Cette erreur provient du code d'erreur sous-jacent connu sous le nom d'ERROR_BAD_EXE_FORMAT, qui se produit lorsque Windows tente de charger quelque chose qu'il interprète comme un exécutable mais ne l'est pas en réalité. Divers scénarios peuvent conduire à ce problème.

Inadéquation de l'architecture

L'une des principales causes de cette erreur est une incompatibilité d'architecture entre le processus tentant de charger la DLL et la DLL elle-même. Plus précisément, les situations suivantes peuvent déclencher l'erreur :

  • Un processus 64 bits essayant de charger une DLL 32 bits
  • Un processus 32 bits essayant de charger une DLL 64 bits DLL

DLL ou dépendance corrompues

Au-delà des inadéquations d'architecture, d'autres Certains facteurs peuvent contribuer à l'erreur « Application Win32 non valide » lors du chargement d'une DLL :

  • La DLL est corrompue ou incomplète en raison de problèmes de téléchargement, d'un écrasement accidentel ou de problèmes de système de fichiers.
  • Une dépendance DLL est endommagée ou manquante, entraînant une arborescence de dépendances cassée lors du chargement de la cible DLL.

Solution

Pour résoudre cette erreur, assurez-vous que :

  • L'architecture du processus correspond à l'architecture de la DLL en cours de chargement (par exemple, 64 -bit pour les DLL 64 bits).
  • La DLL et aucune de ses dépendances ne sont ni endommagées, ni corrompues, ni manquant. Vérifiez qu'ils sont intacts et au bon emplacement.

Étude de cas

Pour illustrer le problème d'inadéquation de l'architecture, un simple programme C avec une DLL est utilisé :

import ctypes as cts
import os
import sys
from enum import Enum

class DLL(Enum):
    LIB_X64 = cts.CDLL("lib_x64.dll")
    LIB_X86 = cts.CDLL("lib_x86.dll")

# Attempt to load the 64-bit DLL in a 32-bit Python process
try:
    dll_x64 = DLL.LIB_X64
except OSError:
    print("DLL loading failed due to architecture mismatch")
Copier après la connexion

L'exécution de ce code dans un interpréteur Python 32 bits déclenchera l'erreur « pas une application Win32 valide ». À l'inverse, le chargement de la DLL 32 bits réussira.

Conclusion

En assurant un bon alignement de l'architecture et en maintenant l'intégrité des DLL et de leurs dépendances, on peut éviter cette erreur lors du chargement de DLL avec des ctypes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal