c/c++调用matlab生成dll,exe,com组件

时间:2022-04-09 14:02:56

做了一个项目需要把matlab下的m文件生成dll或者exe或者com组件在c/c++下使用。m文件中涉及到matlab中的神经网络函数 ,没有神经网络时候dll,exe,com都可以成功调用实现想要的结果无论是画图还是计算,现在有神经网络函数的情况下我现在做到是都出现下面的问题。(test1是matlab的m文件包含了神经网络函数patternet)

c/c++调用matlab生成dll,exe,com组件

总结:需要自行实现神经网络算法。

1 ,dll 的情况,使用用是matlab生成的libTest1.h,libTest1.lib,libTest1.dll三个文件

(1)libTestInitialize();

(2)mlfTest(params);

(3)libTestTerminate();

2,exe的情况,使用matlab生成的exe,网上有很多方法。

3,com组件

这个文章

VC++和MATLAB的混合编程之神经网络工具箱
中提到可以调用matlab神经网络工具箱。
。生成com组件使用。。.bat注册COM组件,使用下面代码 调用函数,代码运行出现上面图片中错误。查原因是matlab的toolbox神经网络函数不能用。

#include "stdafx.h"
#include "stdio.h"
#include "testCom_idl_i.c"
#include "testCom_idl.h"
#include<objbase.h>
#include <iostream>
using namespace std;

#include<objbase.h>
int main(){
    //exe :E:\\trainNet.exe
    //parameters:D:\\autoextract\\fv.mat D:\\autoextract\\testdata\\ D:\\autoextract\\triandata\\

    if (FAILED(CoInitialize(NULL)))
    {
        cout << "unable to initialize COM" << endl;
    }

    IClass1  * pIClass;//接口指针

    HRESULT hr = CoCreateInstance(CLSID_Class1,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_IClass1,
        (void **)& pIClass);

    if (SUCCEEDED(hr))
    {
        cout << "succssed" << endl;
        VARIANT *net=NULL;
         hr = pIClass->test1(1,net);//com中方法

         cout << net << endl;
            

        pIClass->Release();
    }

    CoUninitialize();
    system("pause");
    return 0;
}