2008-10-27 4 views
9

필자는 기본적으로이 제품의 구동을 자동화하기 위해 C 프로그램에 연결할 수있는 DLL을 제공하는 타사 제품인 터미널 에뮬레이터를 가지고 있습니다 (키 입력 보내기, 화면상의 내용 감지 등).스크립팅 언어로 DLL을 호출하려면 어떻게해야합니까?

문제가 발견 될 때마다 실행 파일을 컴파일하고 고객에게 보낼 필요가 없도록 스크립팅 언어 (필자는 Python에 익숙하고 약간은 Perl에 익숙하지 않음)에서 실행하고 싶습니다.

우리는 고객이 우리의베이스 라인을 사용하여 자신의 스크립트를 작성할 수 있기를 원하며 C 코드 작성 및 컴파일 아이디어를 즐겁게 받아 들일 수 없기를 바랍니다.

파이썬/펄이 Windows DLL과 인터페이스하도록하는 좋은 방법은 무엇입니까? 필자의 첫 번째 생각은 서버 프로그램을 작성하고 파이썬 스크립트가 TCP를 통해 통신하도록했지만 더 쉬운 솔루션이되어야한다. 파이썬에서 C 라이브러리를 호출하는

답변

15

한 가지 방법은 ctypes을 사용하는 것입니다

>>> from ctypes import * 
>>> windll.user32.MessageBoxA(None, "Hello world", "ctypes", 0); 
12

펄에서 Win32::API이 DLL을에 인터페이스 일부 쉬운 방법입니다. 컴파일러 및 Windows 헤더에 액세스 할 수있는 경우 Inline::C도 있습니다.

XSUB의도, 펄 펄와 C.

+0

XS에 추가하면 우승자가됩니다. –

5

사이의 인터페이스를 만들 수 있습니다 P5NCI 것 또한 수행 적어도 일부의 경우이다. 그러나 dll과의 인터페이싱을 직접 관리하는 사용자는 사용자에게 친숙하지 않을 것이며, 사용자 (scriptor?) 친숙한 래퍼를 사용하게되면 XS 모듈이 될 수도 있습니다.

나는 "실행 파일 컴파일 및 보내기"와 "스크립트 컴파일 및 보내기"사이에 의미있는 차이가 없다고 생각합니다.

4

파이썬의 경우, 파이썬에서 일반 모듈처럼 가져올 수 있도록 DLL에 링크하는 확장을 컴파일 할 수 있습니다. Boost.Python과 같은 라이브러리를 사용하거나 SWIG (Perl 및 기타 스크립팅 언어도 지원함)와 같은 도구를 사용하여 수동으로 래퍼를 생성 할 수 있습니다.

3

Python Py_InitModule API 함수를 사용하면 Python에서 호출 할 수있는 c/C++ 함수에서 모듈을 만들 수 있습니다.

이 달성하기 위해 코드 C/C++의 다스 정도의 선 정도 걸립니다 그러나 그것은 아주 쉽게 코드를 작성하는 것입니다 :

https://python.readthedocs.org/en/v2.7.2/extending/extending.html#the-module-s-method-table-and-initialization-function

내가 쓴 Zeus 편집기, Zeus을 허용하려면이 appoach를 사용 매크로를 파이썬으로 작성하면 아주 잘 작동합니다.

+0

답안에 "hello world"예제를 쓴다면 실용적이지 않은 페이지로의 링크 대신에이 답변 목록의 최신 버전이 아닐 것입니다 :-) – Davide

+0

내가 제공 한 링크에는 이미 간단한 '안녕하세요 세상'예. 제공된 링크에서 "예제는 Python 소스 배포판의 Demo/embed/demo.c 파일에 있습니다." – jussij

관련 문제