2012-06-05 3 views
4

DLL 파일을로드하고 Python에서 함수를 호출하는 데 문제가 있습니다. 많은 자습서를 시도했지만 어떻게 작동하는지 파악할 수 없습니다. 이것은 DLL 파일로 내 수업입니다. 간단한 C# 코드를 사용합니다.Python에서 DLL 파일 및 호출 함수로드

namespace DemoClassLib 
{ 
    public class cLib 
    { 
     public int increment(int x) 
     { 
      return x + 1; 
     } 
    } 
} 

C# 코드를 작성한 후 "DemoClassLib.dll"이라는 DLL 파일이 생성됩니다. ctypes를 사용하여 DLL 파일을로드합니다. 지금까지는 모든 것이 괜찮습니다.

from ctypes import * 
myDll = WinDLL('D:\\Resources\\DemoClassLib\\bin\\Debug\\DemoClassLib.dll') 

그 시점부터 시작하면 계속할 수 없습니다. 시도한 모든 명령이 실패했습니다.

n = c_int(1) 
myDll.increment(n) 

계속 오류를 표시합니다. 파이썬에서 "increment()"메서드를 어떻게 호출 할 수 있습니까? 그리고 어떻게 입력을 전달하고 출력을 검색 할 수 있습니까? 저는 파이썬을 처음 접했습니다. 누군가 나를 도와 드릴까요? 소스 코드 자습서를 제공해 주시면 대단히 감사하겠습니다.

+3

[이 질문에] (http://stackoverflow.com/questions/6718088/using-ctypes-in-python-to-acces-ac-sharp-dlls-methods)에 따르면 .NET 라이브러리에 액세스 할 수 없습니다. 'ctypes'와 함께. 그러나 다른 방법으로 [라이브러리를 COM 개체로 노출] (http://msdn.microsoft.com/library/zsfww439.aspx) 및 [win32com을 사용하여 액세스] (http://docs.activestate.com /activepython/2.5/pywin32/html/com/win32com/HTML/QuickStartClientCom.html). – schlamar

답변

1

증분 메소드가 클래스의 멤버이기 때문에 "증가"라고하는 이진 파일에 심볼이 없으므로 ctypes로는이 작업을 수행 할 수 없습니다. 이것이 C++ 일지라도 그 이름은 엉망이 될 것입니다. 그러나 C#을 사용하면 .NET Framework에서 코드를 해석하기 때문에 심볼 테이블에 이름이 잘못 표시되는 경우조차 없습니다.

C# 라이브러리와 어떤 이유로 인터페이스해야한다면 IronPython (http://ironpython.net/)을 사용해보십시오. Python은 .NET Framework에서 CLR에 대한 전체 액세스 권한을 가지고 실행됩니다. 위의 COM 인터페이스 공개 제안을 설명하는 주석도 사용할 수 있습니다.