Python load DLL ako zavolat funkciu cez entry point?

Python load DLL ako zavolat funkciu cez entry point?
« kdy: 02. 03. 2021, 15:29:39 »
Zdravim.

Ako nacitat funkciu s dll ktora ma nazov funkcie
Kód: [Vybrat]
int __cdecl Initialise(int,unsigned char,wchar_t *) ?
Tento vysledok som dostal ked som sa na to pozeral cez DLL Export Viewer. V pythone to nie je mozne.
Kód: [Vybrat]
from ctypes import *
import os

output_path = os.path.dirname(__file__)
USB_dongle_patch = os.path.join(output_path, 'XYZ_dll.dll')

USB_dongle = cdll.LoadLibrary(USB_dongle_patch)


test = 0
Dongle_ID = USB_dongle.Initialise()
print(Dongle_ID)

neviem sa dopatrat ako to pouzit funkciu s toho DLL a zavolat ju skz entry_point.

Od vyvojara som dostal toto
Kód: [Vybrat]
          [DllImport("XYZ_dll.dll", EntryPoint = "?Initialise@@YAHHEPA_W@Z", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
            public static extern ReturnCode Initialise(bool enableLogging, uint oemID, String registrationKeyFilePathAndName);


ale netusim ako to vyuzit v pythone


Re:Python load DLL ako zavolat funkciu cez entry point?
« Odpověď #1 kdy: 02. 03. 2021, 18:37:10 »
Autor vám zjevně dal ukázku importu DLL (a její funkce) pro C#.

Pro Python zkuste mrknout na toto Přetečení zásobníku:
https://stackoverflow.com/questions/252417/how-can-i-use-a-dll-file-from-python

tecka

  • ***
  • 138
    • Zobrazit profil
    • E-mail
Re:Python load DLL ako zavolat funkciu cez entry point?
« Odpověď #2 kdy: 02. 03. 2021, 18:37:22 »
Něco jako toto. Přečti si dokumentaci.
Kód: [Vybrat]
dll = cdll.LoadLibrary(path)
Initialise = getattr(dll, "?Initialise@@YAHHEPA_W@Z")
Initialise.argtypes = [c_uint, c_uint, c_wchar_p]
Initialise.restype = c_int
..
Initialise(enableLogging, oemID, registrationKeyFilePathAndName)