2009-11-23 6 views
4

&을로드하는 방법을 설명하는 샘플을 제공해주십시오. Python을 사용하여 C++ DLL의 함수를 호출합니까?파이썬에서 ctypes를 사용하여 DLL을로드하는 방법은 무엇입니까?

"ctypes"를 사용하여 Python을 사용하여 DLL에서 함수를로드하고 호출 할 수 있다고 말하는 기사가 있습니다. 하지만 작동 샘플을 찾을 수 없습니까?

아무에게도 나에게 어떻게 샘플을 제공하면 좋을 것입니다.

답변

5

여기는 입니다. 나는 DLL을로드하고, 함수를 검색하고, 그 함수를 설정하고 호출하는 프로젝트에서 사용했습니다. 코드는 입니다.

import ctypes 

# Load DLL into memory. 

hllDll = ctypes.WinDLL ("c:\\PComm\\ehlapi32.dll") 

# Set up prototype and parameters for the desired function call 
# in the DLL, `HLLAPI()` (the high-level language API). This 
# particular function returns an `int` and takes four `void *` 
# arguments. 

hllApiProto = ctypes.WINFUNCTYPE (
    ctypes.c_int, 
    ctypes.c_void_p, 
    ctypes.c_void_p, 
    ctypes.c_void_p, 
    ctypes.c_void_p) 
hllApiParams = (1, "p1", 0), (1, "p2", 0), (1, "p3",0), (1, "p4",0) 

# Actually map the DLL function to a Python name `hllApi`. 

hllApi = hllApiProto (("HLLAPI", hllDll), hllApiParams) 

# This is how you can actually call the DLL function. Set up the 
# variables to pass in, then call the Python name with them. 

p1 = ctypes.c_int (1) 
p2 = ctypes.c_char_p ("Z") 
p3 = ctypes.c_int (1) 
p4 = ctypes.c_int (0) 

hllApi (ctypes.byref (p1), p2, ctypes.byref (p3), ctypes.byref (p4)) 

이 경우 함수는 터미널 에뮬레이터 패키지에 하나 그것은 아주 간단한 하나 - 그것은 네 개의 매개 변수를 가져다가 값을 (일부는 실제로는 포인터 변수를 통해 반환) 반환하지 않습니다. 첫 번째 매개 변수 (1)는 호스트에 연결하려는 것을 나타냅니다.

두 번째 매개 변수 ("Z")는 세션 ID입니다. 이 특정 터미널 에뮬레이터는 "A"에서 "Z"까지 짧은 이름의 세션을 허용했습니다.

다른 두 매개 변수는 단순히 길이와 다른 바이트를 사용하여 그 순간에 나를 도망칩니다 (나는 코드를 조금 더 잘 문서화해야했습니다).

  • 부하 DLL :

    단계는에 있었다.

  • 함수의 프로토 타입과 매개 변수를 설정합니다.
  • 파이썬 이름에 매핑합니다 (호출하기 쉽도록).
  • 필요한 매개 변수를 만듭니다.
  • 함수를 호출하십시오.

하는 ctypes 라이브러리는 모든 C 데이터 유형 (등등 int, char, short, void* 등)이 있고, 어느 하나의 값 또는 매개 변수를 참조로 전달할 수있다. 자습서는 here입니다.

관련 문제