필터 지우기
필터 지우기

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에서 プログラミング에 대해 자세히 알아보기

태그

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!