我是靠谱客的博主 威武冥王星,最近开发中收集的这篇文章主要介绍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传参就没有问题了。

最后

以上就是威武冥王星为你收集整理的go语言调用matlab生成的dll的全部内容,希望文章能够帮你解决go语言调用matlab生成的dll所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部