概述
Go语言直接调用matlab调用的dll,传参总是出问题,在网上找了各种方法都不对,所以在此使用VS把matlab生成的dll重新封装新的dll,然后给Go语言调用。
如何查看dll中的函数呢?
1、VS如何把matlab生成的dll重新封装为新的dll
1)创建项目
2)写主函数test.cpp
#include "hfcV2.h"
#include "HFC_DataAnalysis.h"
#include<iostream>
#include "mclmcr.h"
#include "mclcppclass.h"
#include <stdio.h>
#include <string.h>
int intial()
{
if( !HFC_DataAnalysisInitialize()) //dll中的初始化函数
{
std::cout << "1111" << std::endl;
printf("Could not initialize !");
return -1;
}
return 0;
}
int HfcV2(char* matPara1,char* matPara2,char* matPara3,char* matPara4,char* matPara5,char* matPara6)
{
mxArray *input[6];
input[0] = mxCreateString(matPara1);
input[1] = mxCreateString(matPara2);
input[2] = mxCreateString(matPara3);
input[3] = mxCreateString(matPara4);
input[4] = mxCreateString(matPara5);
input[5] = mxCreateString(matPara6);
double _y[5];
mxArray *output[1];
mlxHFC_DataAnalysis(1,output,6,input); //dll中的主函数
mxArray *y; //定义输出结果指针
y = output[0]; //将输出参数传递给输出结果
memcpy(_y, mxGetPr(y), sizeof(_y));
std::cout << "MatlabResult:" << (_y[0]) << std::endl;
//HFC_DataAnalysisTerminate(); //dll中的终止函数
return 0;
}
3)头文件 hfcV2.h
#pragma once
#include <string>
extern "C" __declspec(dllexport) int intial();
extern "C" __declspec(dllexport) int HfcV2(char* matPara1,char* matPara2,char* matPara3,char* matPara4,char* matPara5,char* matPara6);
4)配置属性
见我另一篇博文“VS2012调用2013a matlab生成的dll”
5)生成解决方案,就生成dll了。
2、Go语言调用dll
package service
/*
#cgo LDFLAGS: -Llib -lHFC_DataAnalysis -lhfc0814_2 -lstdc++
#cgo CFLAGS: -Iinclude
#include "HFC_DataAnalysis.h"
int intial();
int HfcV2(char* matPara1,char* matPara2,char* matPara3,char* matPara4,char* matPara5,char* matPara6);
*/
import "C"
import "fmt"
func CallMatlab(dataMatPth, jsonLocalPth, filesPath, upDown, channel, dataSource string) {
sign := C.intial()
fmt.Println("sign", sign)
carg1 := C.CString(dataMatPth)
carg2 := C.CString(jsonLocalPth)
carg3 := C.CString(filesPath)
carg4 := C.CString(upDown)
carg5 := C.CString(channel)
carg6 := C.CString(dataSource)
sign1 := C.HfcV2(carg1, carg2, carg3, carg4, carg5, carg6)
fmt.Println("sign", sign1)
return
}
这样,Go语言调用matlab传参就没有问题了。
最后
以上就是威武冥王星为你收集整理的go语言调用matlab生成的dll的全部内容,希望文章能够帮你解决go语言调用matlab生成的dll所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复