Search code examples
c++visual-studio-2010matlabdllloadlibrary

visual studio Dll and Matlab


I am trying to build a dll with visual studio so I can use it in matlab ... I tried thausand codes with no solution !!! I am working on matlab 2013(32and64) and VS2010 ! I tried for example to write the code this way ...

        //The header

    #ifndef SIMPLEH_H
    #define SIMPLEH_H
    #ifdef  __cplusplus
    extern "C" {
    int sq(int x);  
    #endif
    #ifdef  __cplusplus
    }
    #endif
    #endif

//the Func(example)

#include "SimpleH.h"
int sq(int x)
{
return (x*x);
}

visual studio Build it and make th dll file but matlab always doesn't see the function ... What should I do /* I am really stucked :( */ Thanks in advance ...


Solution

  • Example: Take the following files, and build a DLL in Visual Studio.

    helper.h

    #ifndef HELPER_H
    #define HELPER_H
    
    #ifdef _WIN32
    #ifdef EXPORT_FCNS
    #define EXPORTED_FUNCTION __declspec(dllexport)
    #else
    #define EXPORTED_FUNCTION __declspec(dllimport)
    #endif
    #else
    #define EXPORTED_FUNCTION
    #endif
    
    #endif
    

    simple.h

    #ifndef SIMPLEH_H
    #define SIMPLEH_H
    
    #include "helper.h"
    
    #ifdef  __cplusplus
    extern "C" {
    #endif
    
    EXPORTED_FUNCTION int sq(int x);
    
    #ifdef  __cplusplus
    }
    #endif
    
    #endif
    

    simple.cpp

    #define EXPORT_FCNS
    #include "helper.h"
    #include "simple.h"
    
    int sq(int x)
    {
        return (x*x);
    }
    

    Copy the generated simple.dll and the header files simple.h and helper.h in the current directory. Then in MATLAB:

    >> loadlibrary('./simple.dll', './simple.h')
    
    >> libisloaded simple
    ans =
         1
    
    >> libfunctions simple -full
    Functions in library simple:
    
    int32 sq(int32)
    
    >> calllib('simple', 'sq',3)
    ans =
         9
    

    Note: If you are running MATLAB 64-bit, you must build the DLL as such. The rule is that you cannot load a 32-bit library in a 64-bit process.