WebHU - Programozási kérdések és válaszok

nem sikerült betölteni a c++ DLL-t a pythonban

C++ .dll-t próbálok használni Pythonban, de még csak betölteni sem tudom. A következő python kóddal próbálom betölteni:

from ctypes import cdll
mydll = cdll.LoadLibrary('SORT_DLL.dll')

De amikor megpróbálom futtatni ezt kapom:

D:\...\src\SORT_DLL\Debug>UseDll.py
Traceback (most recent call last):
  File "D:\...\src\SORT_DLL\Debug\UseDll.py", line 2, in
 <module>
    mydll = cdll.LoadLibrary('SORT_DLL.dll')
  File "C:\Python27\lib\ctypes\__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 ist keine zulõssige Win32-Anwendung

Az utolsó mondat angolul azt jelenti, hogy "%1 nem érvényes Win32 alkalmazás".

Már megnéztem a következő oldalon: http://docs.python.org/2/library/ctypes.html#module-ctypes , de ez nem vezetett a problémám megoldásához.

07.11.2012

  • Először is, valójában egy cdll, nem pedig egy windll? Másodszor, ahogy a dokumentáció mondja, nem szabad a .dll utótagot hozzáadnia a Windows rendszerhez. 07.11.2012
  • A könyvtárak betöltésekor felmerülő ctypes problémák elhárításának egyik jó módja a lépések explicit felosztása. Először próbálja meg a natív Win32 LoadLibrary használatát (ha van PyWin32, ez a legegyszerűbb módja; ha nem, akkor ctypes a rendszer DLL-jét, szerintem user32-t, vagy használhatja a nem dokumentált wrappert a _ctypes.LoadLibrary-ban), és nézze meg, fogantyút kaphat. Ezután megpróbálhat létrehozni egy CDLL példányt úgy, hogy meghívja a konstruktort az explicit leíróval, és megnézheti, mi történik. Ha az első lépés működik, de a második sikertelen, próbáljon ki néhány kifejezett GetProcAddress hívást a fogantyúval. 07.11.2012

Válaszok:


1

Úgy tűnik, hogy a Python inkompatibilis verziója van telepítve, vagy a DLL-t rossz beállításokkal fordították le. A DLL-nek és a Python interpreternek egyaránt 32 vagy 64 bitesnek kell lennie.

07.11.2012
  • Kösz. Bár a DLL-t lefordítottam 64 bitesre, és telepítettem a Python 64 bites verzióját, ez nem működött. Most telepítettem a Python 32 bites verzióját, és minden remekül működik. 07.11.2012

  • 2

    Tekintse meg ezt a választ: https://stackoverflow.com/a/10163943/953887

    "A ctypes nem működik C++-szal, amiben a [DLL] példa meg van írva."

    07.11.2012
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..