저는 UWP 프로젝트에서 작업하고 있습니다. C#에서 C++로 위치 데이터의 배열을 보내고 싶습니다. (XAML의 위에 DirectX로 생성 된 메쉬를 렌더링하기 위해서입니다.)UWP 애플 리케이션의 배열을 C#에서 C++/Cx dll로 보내기
나는 이것을 시도했다 : Improper marshaling: C# array to a C++ unmanaged array (답 대답). 하지만 작동하지 않습니다, 나는 뭔가를 놓치고 있다고 생각하지만, 나는 무엇을 모릅니다. 그가 제안한 것을 시도 할 때, 제 컴파일러는 C++에서 선언 된 CInput 구조체에 대해 불평합니다. 왜냐하면 네이티브이기 때문에 공용 함수의 매개 변수가 될 수 없기 때문입니다. (C#을에서 호출되는 함수)이 내 코드
(나는 그 질문에 댓글을 것입니다,하지만 난 아직 권한이 없습니다.)
입니다 :
C#에서이 :
C에서public struct CInput
{
public IntPtr array;
}
public VideoView()
{
InitializeComponent();
Loaded += OnLoaded;
float[] test = new float[4];
CInput input = new CInput();
input.array = Marshal.AllocHGlobal(Marshal.SizeOf<float>() * test.Length);
Marshal.Copy(test, 0, input.array, test.Length);
D3DPanel.CreateMesh(out input, test.Length);
Marshal.FreeHGlobal(input.array);
}
++ (D3DPanel.h에서) :
struct CInput
{
float* array;
};
[Windows::Foundation::Metadata::WebHostHidden]
public ref class D3DPanel sealed : public Track3DComponent::DirectXPanelBase
{
public:
D3DPanel();
void CreateMesh(CInput points, int length);
}
사람이 내가 잘못 뭘하는지 말해 줄 수 ?
편집 : here을 설명
내가의 PassArray 패턴을 시도하지만,이 오류 제공합니다
: "오류 C4400 'CONST의 INT'CONST가 /이 유형에 휘발성 예선이 지원되지 않습니다"void CreateMesh(const Array<float>^ points, int length);
"const Array ^"를 "Array"로 바꾸면 "구문 오류 : 식별자 'Array'"가 나타납니다.
나는 받아 들여진 응답에서 쓰여진 것을하기 때문에 구조체를 사용하고 있습니다. 나는 네가하는 말을 정확히 이해하고 있는지 확신 할 수 없다. (실제로 나는 그렇지 않다는 것을 확신한다.) 내가 말하는 유형을 찾아보고 더 잘 이해할 수 있는지, 새로운 질문으로 다시 돌아가겠습니다. – Stef
따라서 IVector를 사용하려면 IVector에서 상속받은 새로운 ref 클래스를 만들어 C++/CX 부분의 CIput 구조체 대신 사용하십시오. 그 맞습니까? 그래서 IVector에 정의 된 모든 기능을 구현해야합니까? – Stef
Platform :: Array를 사용하려고하면 컴파일러에서 불평합니다. (오류 C2061 \t 구문 오류 : 식별자 '배열') – Stef