墨西哥人编译不工作吗?

5视图(30天)
崔
2022年8月8日
评论道: 2022年8月8日
我有一个非常简单的c++程序”readBinFile。cpp”读二进制文件,但墨西哥人编译错误。我怎么修复它正确地编译?(我已经成功地将matlab mingw64和验证了运行时环境)
matlab调用语法是:
outImg = readBinFile (“myBinFile.bin”);
readBinFile.cppis following:
#包括“mex.hpp”
#包括“mexAdapter.hpp”
#包括“MatlabEngine.hpp”
#包括< iostream >
#包括<字符串>
#包括< stdio . h >
#包括< stdlib.h >
使用matlab:墨西哥人::ArgumentList;
使用名称空间matlab:数据;
MexFunction:公共matlab::墨西哥人:函数{
/ /指针MATLAB引擎
std::要查看< matlab::引擎::MATLABEngine > matlabPtr = getEngine ();
/ /工厂创建MATLAB数据数组
ArrayFactory工厂;
类型定义结构体{
uint8_tBR, G,;
uint32_tAlignmentDummy;
}FColorStruct;
类型定义结构体{
uint32_tInSizeX;
uint32_tInSizeY;
FColorStructimgUreal (540 * 480);
}imgBinStruct;
公众:
无效操作符()(ArgumentList输出,ArgumentList输入){
size_tresolutionX = 540;
size_tresolutionY = 480;
/ /读我文件
文件* pFile;
lSize;
imgBinStruct *缓冲;
size_t结果;
std:: string in =输入[0][0];/ / bin文件的名字
/ / matlab::数据::TypedArrayRef < MATLABString > =三机一体;
/ / std:: string cmdString = std:: string (in);
pFile = fopen (in1.c_str (),“rb”);
如果(pFile = = NULL) {
std:: ostringstream流;
< <“未能开放”+ in1 < < std:: endl;
displayOnMATLAB(流);
退出(1);
}
/ /获取文件大小:
fseek (pFile 0 SEEK_END);
lSize = ftell (pFile);
倒带(pFile);
/ /分配内存包含整个文件:
缓冲= (imgBinStruct *) malloc (sizeof (imgBinStruct));
如果(缓冲区= = NULL) {
std:: ostringstream流;
< <“内存错误”< < std:: endl;
displayOnMATLAB(流);
出口(2);
}
/ /复制文件到缓冲区:
结果=从文件中读(缓冲区,1 lSize pFile);
如果(结果! = lSize) {
std:: ostringstream流;
< <“阅读错误”< < std:: endl;
displayOnMATLAB(流);
出口(3);
}
/ / matlab垫
matlab::数据::TypedArray < uint8_t > outImg =工厂。createArray < uint8_t > ({resolutionY resolutionX 3});
(size_t我= 0;我< resolutionY;我+ +){
(size_t j = 0;j < resolutionX;j + +) {
outImg[我][j] [2] = (uint8_t)(缓冲- > imgUreal [i * resolutionX + j])。b;
outImg[我][j] [1] = (uint8_t)(缓冲- > imgUreal [i * resolutionX + j]) .G;
outImg[我][j] [0] = (uint8_t)(缓冲- > imgUreal [i * resolutionX + j]) r;
}
}
输出[0]= outImg;
/ /终止
文件关闭(pFile);
免费(缓冲);
}
无效displayOnMATLAB (const std:: ostringstream&流){
matlabPtr - >函数宏指令(u“流”0,
std::向量数组< > ({factory.createScalar (stream.str ())}));
}
无效checkArguments (matlab::墨西哥人::ArgumentList输出,matlab::墨西哥人::ArgumentList输入){
如果(inputs.size () ! = 1) {
matlabPtr - >函数宏指令(u“错误”,
0,std::向量< matlab::数据::数组> ({factory.createScalar (“一个输入本文件要求”}));
}
如果(输入[0]. gettype () ! = matlab::数据::ArrayType:: MATLAB_STRING) {
matlabPtr - >函数宏指令(u“错误”,
0,std::向量< matlab::数据::数组> ({factory.createScalar (“输入binFileName必须标量字符串”}));
}
如果(outputs.size () ! = 1) {
matlabPtr - >函数宏指令(u“错误”0,std::向量< matlab::数据::数组> ({factory.createScalar (“输出参数必须为1个”}));
}
}
};
然后使用下面的命令编译墨西哥人,(2022 matlab运行,windows10)
墨西哥人readBinFile.cpp
错误使用墨西哥人
文件包括从C:\Program Files\MATLAB\ R2022a /走读生/ include / MatlabEngine.hpp: 11日
从D: \ matlab_files \ mytest \ readBinFile.cpp: 6:
C:\Program Files\MATLAB\ R2022a /走读生/ include / MatlabEngine / engine_util。高压泵:二二20:错误:
的多个定义的枚举类matlab::引擎::WorkspaceType”
enum类WorkspaceType {
^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
文件包括从C:\Program Files\MATLAB\ R2022a /走读生/ include / mex.hpp: 81年,
从D: \ matlab_files \ mytest \ readBinFile.cpp: 4:
C:\Program Files\MATLAB\ R2022a /走读生/ include / cppmex / mexMatlabEngine。高压泵:25:20:注意:
之前的定义
enum类WorkspaceType {
^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
文件包括从C:\Program Files\MATLAB\ R2022a /走读生/ include / MatlabEngine.hpp: 12,
从D: \ matlab_files \ mytest \ readBinFile.cpp: 6:
1评论
崔
2022年8月8日
我有尝试 去除头文件” MatlabEngine.hpp ,我设法让我的.mexw64通过墨西哥人编译文件,我不知道为什么会这样。

登录置评。

答案(0)

标签

s manbetx 845


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!