go语言调用matlab生成的dll

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传参就没有问题了。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值