pinvoke를 사용하여 C에서 C로 다른 구조체 내의 구조체 배열을 마샬링하려고합니다. AFAIK, 안돼.
대신 C 구조체에서 ptr을 my 배열과 malloc으로 선언합니다. 문제점 : 1) C# 측에서 동등한 것을 어떻게 선언합니까? 2) 어떻게하면 C# 측에 해당하는 것을 할당하고 사용할 수 있습니까?C 배열 포인터를 C로 사용하는 방법 #
//The C code
typedef struct {
int a;
int b; } A;
typedef struct {
int c;
// A myStruct[100]; // can't do this, so:
A *myStruct; } B;
//The c# code:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class A{
int a;
int b;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class B{
int c;
// can't declare array of [100] A structures...
?
}
[편집] 어떤 식 으로든 저는 다른 곳에서 C# 측의 객체 고정 배열에 대해 읽은 것을 잘못 해석했습니다.
data.B[3].a = 4567;
을 그래서이 오류가 무엇인지에 대해 다른 곳에서 읽기 : 사용하는 경우 그리고 는 C에서 배열 크기 그래서 확인 컴파일 문제를 해결할 수 있습니다,하지만 난 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"수 , 나는이 방법을 추가했다.
public void initA()
{
for (int i = 0; i < 100; i++) { B[i] = new A(); }
}
다시 컴파일했지만 OK이지만 동일한 오류 메시지.
'A [] myStruct'을 사용해 보셨나요? –
괜찮습니다. 하지만 어떻게 스토리지를 할당하고 사용합니까 (여전히 C#을 배우고 있습니다). 감사. – PaeneInsula
그냥 궁금 해서요 : 왜 * C에서'myStruct [100];을 사용할 수 없습니까? 그것은 C# 측의 작업을 훨씬 쉽게 만듭니다. –