Hello;
is there any way DDS:DynamicData::print()'s output to write on a file ?
If no, how can i get nested structured members ?
Best regardes ...
Hello;
is there any way DDS:DynamicData::print()'s output to write on a file ?
If no, how can i get nested structured members ?
Best regardes ...
Hello Oruc,
I do not know if you can change the print to redirect to a file. However, if you want/need to access the nested structures within a DynamicData object, there are two ways to access a these nested types:
1. get_complex_member:
This copies the nested DynamicData structure into the DynamicData structure passed in. If you use this, setting the field values of the copy will not affect the original object.
2. bind_complex_member/unbind_complex_member:
This allows you to bind a DynamicData type to a complex member field of the outer DynamicData type, without copying the object (which makes this more efficient). This is required if you are going to modify the value of the original field. this will fail if the DynamicData type passed in is already bound to a type.
Thank you,
Rose
Hello Rose,
thank you for your reply but I have already tried this options. I will give you an example bellow to make you understand on this isue.
myStruct is like this :
struct nested {
long a;
wstring b ;
.
.
.
};
typedef sequence<nested,10> nestedlist;
struct mystruct{
long no;
nestedlist list;
};
I can access nested structre if sequence didn't use .
Now, do you have an idea how to access sequence's elemans?
Thank you,
Oruc,
Hello Oruc,
I have done something similar to you, but without typedef'ing the sequence. I first bind to the sequence itself, and call get_info. This gives me the length of the sequence, so I can iterate over it.
Now you can bind to the individual elements in the sequence by their ID numbers. The important thing to note is that when you bind the element in the sequence, the ID is 1-based.
Does this still work when the sequence is typedef'd?
Thank you,
Rose
struct nested { … };
struct mystruct {
Sequence<nested> nestedSeq;
};
// Create DynamicData types for mystruct_dynamic_data, nested_sequence, and nested_struct.
// For nested_sequence & nested_struct, pass in NULL to constructors to leave them unbound
DDS_DynamicData mystruct_dynamic_data(mystructTypeCode, DDS_DYNAMIC_DATA_PROPERTY_DEFAULT);
DDS_DynamicData nested_sequence(NULL, DDS_DYNAMIC_DATA_PROPERTY_DEFAULT);
DDS_DynamicData nested_struct(NULL, DDS_DYNAMIC_DATA_PROPERTY_DEFAULT);
DDS_DynamicDataInfo nested_sequence_info;
// Bind the nested_sequence DynamicData to the nested sequence within the mystruct_dynamic_data
mystruct_dynamic_data.bind_complex_member(nested_sequence, "nestedSeq”,
DDS_DYNAMIC_DATA_MEMBER_ID_UNSPECIFIED);
// Get the length of the sequence
nested_sequence.get_info(nested_sequence_info);
// Bind the nested_struct to each entry in the sequence using the 1-based member ID
for (int j = 0; j < nested_sequence_info.member_count; j++) {
nested_sequence.bind_complex_member(nested_struct, NULL, j+1);
// Access the fields of the structure in the sequence...
}
thank you so much. i am going to try that as soon as posible and make you know what if it is okey
regards..
Hello Rose ,
i checked your suggestion but there is an difference between c#API and what you use. the bind_complex_member ()
methot is not using as your usage on c # . on C#API the function like this;
bind_complex_member (DynamicData^ value_out, System::String^ member_name, System::Int32 member_id)
(http://community.rti.com/docs/html/api_dotnet/classDDS_1_1DynamicData.html you can check it from here)
so i need to give member_name and member_id as parameter . what is sequence's members name.? I donT thing they have a name so I connot get bind comlex member. do you have an idea what can I do to get bind complex member ?
thanks ,
Best Regardes,
Oruc
Hello Oruc,
I think the API is very similar -- the C++ API also takes a name, and for the sequence you pass in null to look up the member by ID. Does that work?
Thank you,
Rose
thank you,
this problem is solved .