2009-11-03 5 views
2

C#에서 생성 된 응용 프로그램에 데이터 구조를 전송하려고합니다. 구조를 VC++ 프로그램으로 채울 것입니다.VC++에서 C#으로 데이터 구조 전달?

어떻게 보내면 되나요? C#에서 구조가 지원됩니까?

아니면 VC++에서 LPDATA를 사용하면 어떻게 C#에서 같은 결과를 얻을 수 있습니까?

답변

2

를 호출 할 수 있습니다

의 C#에서 구조체를 정의하면 C++ 구현을 일치하는 데이터 유형을 사용했는지 확인해야합니다. C# 등의 바이트로 C에서 숯불 ++ ...

당신은 구조체를

선언을 전달 ++ 구현

[StructLayout(LayoutKind.Sequential, Size=TotalBytesInStruct),Serializable] 
public struct MyStruct 
{ 
} 

의 C#에서 구조체의 메모리 레이아웃이 C와 일치 보장하기 위해 몇 가지 속성을 추가 할 필요가 동일한 데이터 구조를 사용하는 C#의 구조체. C#에서 C# 응용 프로그램으로 구조체에 대한 포인터를 전달하고 C#의 새로운 구조체로 캐스팅합니다. 당신에게 당신의 C#을 DLL을 호출하는 C#을 DLL

를 호출

, 당신의 최선의 선택은 C++에서 혼합 모드 어셈블리를 사용하는 것입니다. 이렇게하면 고유 한 코드와 관리되는 코드 사이를 전환하는 데 pragma managedunmanaged을 사용할 수 있습니다. 이 방법을 사용하면 C++ 래퍼로 C# 클래스를 멋지게 포장 할 수 있습니다. 이 Microsoft article을 참조하십시오. Mono에서는 지원되지 않습니다.

0

예, 구조가 지원되며 사용할 수 있습니다. 그러나 문자열은 약간의 작업이 필요할 수 있습니다.

0

구조를 표시하십시오. C#에서는 형식을 네이티브 C++ 유형에 쉽게 매핑 할 수있는 마샬 러 도우미가 있으므로 형식을 장식하는 방법을 알아야하며 구조를 표시하면 도움이됩니다. 그 char *을의 경우 정상적인 문자열의 경우는 일반적인 버퍼, 또는 string 예를 들어

, 당신이 언급 한 LPDATA 일이, 그것은 C#으로 byte[] 바로 위에 매핑합니다 (string 매핑은 마샬의 도움이 필요하지만 많이 쉽게 일단 적절하게 장식 된 것을 사용하는 것).