C++ライブラリに対するMATLABインターフェイスにおける「const wchar_t*」の扱いに関して
Show older comments
https://jp.mathworks.com/help/matlab/matlab_external/generate-interface-to-matrixoperations-library-windows-shared-library.html の手順を参考にC++自作ライブラリを作成しております。その際、cont wchar_t* を引数に持った関数をコールしたいのですが、期待した値がC++ライブラリ側に渡されません。どのように設定すればよいでしょうか?
<TestClass.cpp>
#include "TestClass.h"
TestClass::TestClass(int inp, const wchar_t* inpStr)
{
member1 = inp;
member2 = inpStr;
member3 = L"dummy text";
}
TestClass::~TestClass()
{
}
int TestClass::addOne()
{
return member1 + 1;
}
<TestClass.h>
class TestClass
{
public:
TestClass(int inp, const wchar_t* inpStr);
~TestClass();
int addOne();
public:
int member1;
const wchar_t* member2;
const wchar_t* member3;
};
<ライブラリ呼び出し部と実行結果>
addpath("TestClass")
capObj = clib.TestClass.TestClass(3, "text")
capObj =
member1: 3
member2: "뚨ⶮ翼"
member3: "dummy text"
member2の変数は実行の度、値が変化します。
2022/06/03追記
コード生成に使用したコードは下記になります。
% mex -setup cpp
hppFile = "TestClass.h";
cppFile = "TestClass.cpp";
clibgen.generateLibraryDefinition(hppFile, ...
"SupportingSourceFiles", cppFile, ...
TreatConstCharPointerAsCString=true, ...
OverwriteExistingDefinitionFiles=true, ...
ReturnCArrays=false);
defineTestClass;
summary(defineTestClass)
build(defineTestClass)
定義ファイルは生成されたものを変更せず使用しております。
4 Comments
Atsushi Ueno
on 30 May 2022
member3 = L"dummy text";
ワイド文字列リテラル L"dummy text" の型がconst wchar_t*であるのに対し、
capObj = clib.TestClass.TestClass(3, "text")
のナロー文字列リテラル "text" の型がconst char *で、
const char *をconst wchar_t*で受けるからmember2の変数がおかしくなるのではないでしょうか?
capObj = clib.TestClass.TestClass(3, L"text")
とすれば解決するのではないでしょうか? なんかもう答えを書いているような...
Teppei Iwata
on 2 Jun 2022
Kojiro Saito
on 2 Jun 2022
ドキュメントを参考にされたとのことですが、
clibgen.generateLibraryDefinitionにはどんなオプションを指定していますか?
こちらでも再現ができるようにclibgen.generateLibraryDefinitionのコードと、自動生成されるdefinetestlib.mlxの<shape>の部分をどのように変更されたのか、中身を見せていただけるとスムーズです。
Kojiro Saito
on 9 Jun 2022
追記ありがとうございました。
文字化けなのでエンコードが怪しいと思われるのですが、
capObj = clib.TestClass.TestClass(3, "あいうえお") を何度か実行するとたまにうまく行くときがあるので、根本原因がまだ分からない状況です。
Answers (1)
Teppei Iwata
on 3 Jun 2022
0 votes
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!