c言語で作ったライブラリの関数を呼び出して、引数で渡したポインタに値を詰めて、 Mファイルの関数で受け取りたいのですが、どのような実装をすればよろしいでしょうか?
【添付ファイル】
上記事象の発生するソースを添付しています。
・cライブラリ(shrlibsample.mexw64))の関数 c_bufwrite() にcharポインタを引数で渡す。
・cの関数内でポインタの中に値"abcde"を詰める。
⇒ M関数 wrap_bufwriteで pの中に値"abcde"が受け取れない
■Test_pointer\src_wrap\wrap_bufwrite.m
function [ ret ] = wrap_bufwrite( pbuf, bufsize )
ret = 0;
if coder.target('MATLAB')
p = libpointer('cstring', char(zeros(1,bufsize)));
ret = calllib('shrlibsample', 'c_bufwrite', p);
p.value;
else
ret = coder.ceval('c_bufwrite', coder.wref(pbuf));
end
■Test_pointer\src_c\shrlibsample.c
/*
* charポインタを受け取り、"abcd"を詰めて復帰する
*/
EXPORTED_FUNCTION int c_bufwrite(char *buf)
{
buf = "abcde";
printf("%s\n", buf);
return 1;
}