我是靠谱客的博主 威武冥王星,这篇文章主要介绍go语言调用matlab生成的dll,现在分享给大家,希望可以做个参考。

Go语言直接调用matlab调用的dll,传参总是出问题,在网上找了各种方法都不对,所以在此使用VS把matlab生成的dll重新封装新的dll,然后给Go语言调用。

复制代码
1
2
如何查看dll中的函数呢?

这里写图片描述
1、VS如何把matlab生成的dll重新封装为新的dll
1)创建项目
这里写图片描述
这里写图片描述
2)写主函数test.cpp

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#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; }
复制代码
1
2
3)头文件 hfcV2.h
复制代码
1
2
3
4
5
#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);
复制代码
1
2
3
4
4)配置属性 见我另一篇博文“VS2012调用2013a matlab生成的dll” 5)生成解决方案,就生成dll了。

2、Go语言调用dll

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 }
复制代码
1
2
这样,Go语言调用matlab传参就没有问题了。

最后

以上就是威武冥王星最近收集整理的关于go语言调用matlab生成的dll的全部内容,更多相关go语言调用matlab生成内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部