How do i acess, cast & deallocate individual elements of a stringPtrPtr

3 次查看(过去 30 天)
I have an issue using the NI TDMS dll from matlab.
I am able to call most functions from the dll successfully.
The problem arises after I call the function 'DDC_GetDataValuesString'
iTemp = libpointer('stringPtrPtr',repmat({''},1,nValues));
[eCode,dValues] = calllib(libname,'DDC_GetDataValuesString',hChannel,iStart,nValues,iTemp)
This function is successfully called but the variable iTemp must have its memory space deallocated using the function from the dll called 'DDC_FreeMemory'
I have tried the following, but each one results in matlab crashing
  • Do nothing, but matlab crashes when the existing from the calling function.
  • Deallocate the variable iTemp
calllib(libname,'DDC_FreeMemory',iTemp)
  • Deallocate each element of iTemp
for i = 0:nValues-1
pTemp = iTemp + i;
setdatatype(pTemp,'voidPtr');
calllib(libname,'DDC_FreeMemory',pTemp)
end
I guess the problem i am having is that i need to be able to deallocate each element of a 'stringPtrPtr' individually but i do not know to convert each element of the libpointer object to a 'cstring'

回答(2 个)

Christian Fasolo
Christian Fasolo 2018-2-27
Hello and sorry for my english.
I use the following code to solve this problem. It's probably slowest than the "original stringPtrPtr" solution, but it works well. The main idea is to read each adress in the stringPtrPtr vector as an uint16 and to use stringPtrPtr to read the string at this location. The result is an unique cell string for each adress. And the pointer pvals can be cleared safely by matlab.
Regards, Christian
case 'DDC_String'
vals.Value = repmat({''},1,numvals);
pvals = libpointer('uint16Ptr',0);
for iN=0:numvals-1
[err,v]=calllib(libname,'DDC_GetDataValues',chans(idxA(j)),iN,1,pvals);
setdatatype(v,'stringPtrPtr');
vals.Value{iN+1} = v.Value{1};
end

JAAdrian
JAAdrian 2018-1-19
Sorry, I know this is a very old thread but I am also in need of the solution to this very problem. I am working the very same library and need to free the memory the memory the pointer array is pointing to.
Thanks and regards, Jens

类别

Help CenterFile Exchange 中查找有关 Call C from MATLAB 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by