2016-12-07 1 views
0

내가 matlab에 내에서 일부 외부 C++ 코드를 사용하고이 필요coder.ceval 구조체 <strong>coder.ceval</strong>를 통해 그것을 호출하여 포인터

:
myStruct.a = 0; 
myStruct.b = 1; 

은 지금은 C++ 헤더 파일 struct.h에 정의 된 구조체가 Matlab에서 C++ 구조체의 포인터를 나타내는 방법을 모르겠습니다. '=': myPoint '에'myPoint '에서 변환 할 수 없습니다 *

coder.cstructname(matlab_myPoint,'myPoint','extern'); 
coder.cstructname(matlab_myStruct,'myStruct','extern'); 

matlab_myPoint= struct('x',0,'y',0); 
matlab_myStruct = struct('num_points',2,'points',myPoint); 

오류 메시지에

오류 C2440 끝 : 내가 matlab에에서 구조체를 정의 할 필요가로서 내가 좋아하는 일을 시도입니다 '

원래 C++ 구조체에는 구조체 배열에 대한 포인터가 사용됩니다. Matlab 구조체에서이 관계를 어떻게 재현 할 수 있습니까? 고맙습니다!

답변

0

마침내 Matlab에서 C로 오브젝트 나 포인터를 전달하지 않고 대신 구조체를 전달하여 문제를 해결할 수있었습니다. 내 경우에 구조체는 원하는 클래스의 새 객체를 초기화하는 데 필요한 모든 데이터를 포함합니다. 이것을 달성하기 위해

coder.cstructname(matlab_struct_name,'c_struct_name','extern'); 

하나 C.

매트랩과에이어서

을 동일한 구조체 아키텍처를 사용할 필요가있는 매트랩 구조체에 의해 정의되는 C 구조체 컴파일러 말한다. C- 헤더 파일은 Simulink 속성에서 지정해야합니다.

matlab에의 C-코드의 호출은 결국 다음과 같습니다 matlab_myRet이 matlab_struct_name 같은 같은 방법으로 생성 및 반환 값 구조체를 나타내고있다

coder.ceval('gateway', 1, coder.ref(matlab_struct_name), ,coder.wref(matlab_myRet)); 

. 은 C 코드 안에 그것을 기록 된 모든 값들은 나중 matlab에 내에서 얻을 수있다 :

마지막
matlab_myRet.x(1:5); 
matlab_myRet.y(1:5); 

사용 된 구조체의 예 : 매트랩

:

matlab_struct_name.x = 123; 
matlab_struct_name.y = 456; 

matlab_myRet.x = zeros(10,1); 
matlab_myRet.y = zeros(10,1); 

C의 -code (헤더) :

typedef struct 
{ 
    double     x[5]; 
    double     y[5]; 
}matlab_struct_name; 

    typedef struct 
{ 
    double     x[10]; 
    double     y[10]; 
}myReturn; 

는 희망이

,536,913을하는 데 도움이