I have not found detailed steps to build fortran dll from IDE environement and link to Matlab.
I found that IDE approach to create fortran dll is simpler tha "mex -setup " approach since we need to
edit *.stp, *.bat files fom /bin & matlab prefdir. We do not have write permission for
Hence I created some sample document to create and run visula studio here:
I use Vista business SP2, Matlab R2006b, IVF 11.0 & VS 2008.
1. Create Fortran Project from IDE:
File->New Project->IVF->Library->Dynamic-link Library:
Project name :
2. Copy \extern\include\mexversion.rc to the local project dir: TestIVFDLL
3. Solution explorer->Resource Files->Add existing item->mexversion.rc
4. Copy sample mexfunction fortran file from >matlabroot>\extern\reffbook\timestwo.F to the local project dir TestIVFDLL
5. Solution explorer->Source Files->Add existing item->timestwo.F
6. Solution explorer->Fortran->General->Additional Include Directories:
7. Solution explorer->Fortran->Preprocessor: Yes(/fpp)
8. Solution explorer->Fortran->Diagnostics:
Generate Interface Blocks: No
Check Routine Interface : No
9. Solution explorer->Linker->General->Output Files: .mexw32
10. Solution explorer->Linker->General->Output FilAdditional Include Directories: \extern\lib\\microsoft
(Here it is Vista 32-bit platform)
11. Solution explorer->Linker->Input->additional dependencies : libmx.lib libmex.lib libmat.lib libeng.lib
12. Solution explorer->Linker->Input->Module definition file:
For this case:
13. Issue Build command.
After build, perform the following check:
1. Go to command prompt; go to project dir & issue DUMPBIN command.
(If this command does not work, look for "vcvars.bat" and set all MSVS variables.)
$>DUMPBIN /exports .\Debug\testivfdll.mexw32
DUMPBIN command results:
1 0 00001005 MEXFUNCTION = @ILT+0(_MEXFUNCTION)
2 1 0000100A TIMESTWO = @ILT+5(_TIMESTWO)
Everything is perfect: gateway function (MEXFUNCTION)& our calculation function (TIMESTWO) get exported.
2. Construct header file for this function:
subroutine timestwo(y, x)
real*8 x, y
y = 2.0d0 * x
Note: The above file is the the same as \extern\examples\refbook\timestwo.F
The corresponding header required for Matlab:
void TIMESTWO (double*, double*);
-----> otherwise Matlab cribs!
3. Go to Matlab folder and copy the header file & testivfdll.mexw32
4. Write Matlab dummy file to test this dll
% matlab is case-sensitive to dll & header names
mlfunc = libfunctions('testivfdll','-full');
aa = 3.0;
cc = 0.0;
bb =calllib('testivfdll', 'TIMESTWO', cc,aa)