what data type do i need to calllib with pointer argument char*

Hey there! I'm using a shared library and I'm tring to call this function from it (from h file):
long PI_FUNC_DECL PI_EnumerateUSB(char* szBuffer, long iBufferSize, const char* szFilter);
So I'm making the following code:
>> szBuffer = libpointer('char');
>> iBufferSize = libpointer('int32');
>> calllib(libalias,'PI_EnumerateUSB',szBuffer,iBufferSize,'E-861');
Error using calllib
Pointer type must match data type
After some checking, the problem is without doubt the char* (szBuffer). From what I understand from Matlab Help I need it to be a char array, so what am I'm doing wrong?
p.s.
I have the problem in other functions as well that require char*
Thanks!

Answers (1)

You are over thinking this let MATLAB do the work no libpointers are needed:
[status, resultString]=calllib(libalias,'PI_EnumerateUSB',blanks(100),100,'E-861')
The code you wrote is doing the equivalent of the c code:
char *szBuffer=NULL; int* iBufferSize=NULL;
PI_EnumerateUSB(szBuffer,*iBufferSize,"E-861");
and if you were using C your program would crash...

2 Comments

Hey Philip,
The problem is that the function changes the value of szBuffer, and that is what I need...
I actually solved my initial problem by writing:
szBuffer = libpointer('string',blanks(128));
szBuffer.value
calllib(libalias,'PI_EnumerateUSB',szBuffer,128,'')
szBuffer.value
The problem now is that szBuffer does not change its value :/
I also tried passing stringPtr, same results.
An equivalent Python code did work, and the function return value indicates that it ran without errors, so the function in the dll is working, but for some reason the value of szBuffer doesn't change... Any ideas?
ERR!
I Solved it, It's really simple but I couldn't find a single place in which this behavior is documented...
So in matlab, instead of changing szBuffer itself, it simply goes into the return value.
So instead of returning just [long] it now returns [long, string] and the string is the new szBuffer. Which means I really don't need pointers...
Why isn't it clearly written in the documentation... :(

Sign in to comment.

Products

Tags

Asked:

on 28 May 2014

Commented:

on 28 May 2014

Community Treasure Hunt

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

Start Hunting!