2016-08-09 5 views
0

WiringPi C 라이브러리 내의 mcp23017.c에있는 함수를 사용하여 C# 래퍼 클래스를 만들고 싶습니다. 나는이 기존의 C# WiringPi WrapperClass 다른 기능을했다. 이 래퍼 클래스를 확장하여 mcp23017의 함수를 사용하려고합니다. 나는 wrapper 내에서 하나의 함수로 새로운 클래스를 만들려고 시도했다 :C 라이브러리의 C# 래퍼 클래스

public class mcp23017 
{ 

    [DllImport("libmcp23017.so", EntryPoint = "myPinMode")] 
    public static extern void myPinMode(struct wiringPiNodeStruct *node,Int32 pin, Int32 mode); 

} 

그러나 구조체 요소에 대해 이러한 에러가 발생한다.

) expected. 
; expected. 
{ expected. 
} expected. 
Invalid token "*" in class struct or interface member declaration 

래퍼 클래스에 구조체를 정의해야합니까? 어떻게 작동합니까? C#을 처음 사용하는 것에 익숙하지 않습니다.

답변

0

struct을 C#의 매개 변수로 사용하는 것은 유효하지 않습니다. 마샬 러가이 행동을 처리해야합니다. 아마도 당신은 이런 의미 였을 것입니다.

[StructLayout(LayoutKind.Sequential)] 
public struct WiringNode 
{ 
    //Struct members here 
} 

[DllImport("libmcp23017.so", EntryPoint = "myPinMode")] 
public static extern void myPinMode(ref WiringNode node, Int32 pin, Int32 mode); 

그때로 불리는 :

var myStruct = new WiringStruct(); 
//Set struct members 

myPinMode(ref myStruct, whatever, whatever); 
+0

하지만 파일 wiringPi.h (링크 : WiringPI)에서 C 라이브러리에 정의 된'구조체 wiringPiNodeStruct'를 사용하고 싶습니다. Wrapper 클래스의 구조체를 참조 할 수 있습니까? –

+0

직접적으로. .net 측에서 구조체를 다시 생성 한 다음 마샬링하여 .net과 c 사이에서 메모리를 변환하도록 처리해야합니다. –

+0

좋습니다. 어떻게 수행 할 수 있는지에 대한 예제 또는 참고 자료가 있습니까? 또는 래퍼 클래스를 만들지 않고 C 라이브러리의 함수를 사용하는 다른 방법은 없습니까? –