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

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

댓글을 달려면 로그인하십시오.

답변 (1개)

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

카테고리

Help CenterFile Exchange에서 C++ ライブラリに対するプリビルド MATLAB インターフェイスの使用에 대해 자세히 알아보기

태그

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!