2013-08-25 1 views
0

나는 C#에서 간단한 예제를 썼다 : 당신이 볼 수 있듯이Iron Python에서 C#으로 작성된 정적이 아닌 Dll 함수를 사용하는 방법은 무엇입니까?

using System; 
using System.Collections.Generic; 
using System.Linq; 
    using System.Text; 

    namespace DLLTest 
    { 
     public class MyDllTest 
      { 
       public int sumFunc(int a, int b) 
        { 

     int sum = a + b; 
     return sum; 

    } 

    public static string stringFunc(string a, int numT) 
    { 
      if (numT < 0) 
      { 
       string errStr = "Error! num < 0"; 
       return errStr; 
      } 
       else 
      { 
       return a; 
      } 

     } 
    } 
} 

- 첫 번째 함수에서 내가 "정적"사용하지 않는. 나는이 개 인수를 통과 할 때

import sys 
import clr 
clr.addReferenceToFileAndPath(...path do dll...) 

from DLLTest import * 
res = MyDllTest.sumFunc(....HERE MY PROBLEM IS...) 

-이 오류가 발생합니다 : :이 코드를 사용하여 철 파이썬에서 실행

나는 fisrt 인수 유형에서 할 것이 요구 알고있는 것처럼
>>> res = MyDllTest.sumFunc(4,5) 

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
TypeError: sumFunc() takes exactly 3 arguments (2 given) 

"MyDllTest" 쓰기를 시도 할 때 : a = new MyDllTest 오류가 발생합니다.

어떻게해야합니까? 도움이 될 것입니다.

답변

2

sumFunc은 인스턴스 메소드이므로 먼저 메소드를 호출 할 수 있도록 클래스의 인스턴스를 만들어야합니다.

import clr 
clr.addReferenceToFileAndPath(...path do dll...) 

from DLLTest import MyDllTest 

test = MyDllTest() 
test.sumFunc(33, 44) 

C# 비 정적 메서드는 클래스 인스턴스에서만 호출 할 수 있으며 정적 메서드는 클래스 자체에서 호출 할 수 있습니다.

Static and instance methods

+0

! 나는 "new MyDllTest"를 사용해야한다고 확신했지만, 이제는 "new"가 여기에 필요 없다는 것을 알았습니다 ... 고마워요 !!! – user1386966

+0

예,'new'는 파이썬에 존재하지 않습니다. 단지 클래스를 일반적인 파이썬 클래스로 사용하십시오. –

관련 문제