Clear Filters
Clear Filters

C++ライブラリに対​するMATLABイン​ターフェイスにおける​「const wchar_t*」の扱いに関して

2 views (last 30 days)
Teppei Iwata
Teppei Iwata on 29 May 2022
Commented: Kojiro Saito on 9 Jun 2022
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 =
TestClass のプロパティ:
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
Kojiro Saito
Kojiro Saito on 2 Jun 2022
ドキュメントを参考にされたとのことですが、
clibgen.generateLibraryDefinitionにはどんなオプションを指定していますか?
こちらでも再現ができるようにclibgen.generateLibraryDefinitionのコードと、自動生成されるdefinetestlib.mlxの<shape>の部分をどのように変更されたのか、中身を見せていただけるとスムーズです。
Kojiro Saito
Kojiro Saito on 9 Jun 2022
追記ありがとうございました。
文字化けなのでエンコードが怪しいと思われるのですが、
capObj = clib.TestClass.TestClass(3, "あいうえお") を何度か実行するとたまにうまく行くときがあるので、根本原因がまだ分からない状況です。

Sign in to comment.

Answers (1)

Teppei Iwata
Teppei Iwata on 3 Jun 2022
本文内に追記いたしました。ご確認よろしくお願いいたします。

Categories

Find more on プログラミング in Help Center and File Exchange

Tags

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!