In my C++ solution I have a DLL. My DLL uses Octave C++ classes and also uses Octave as "embedded" engine. By using the following steps (1st method) I can build my C++ solution and run the built executable and get the output results in some text files without any problem:
The steps of using Octave Libraries in Visual Studio C++ 2008:
1- Download Octave 3.6.1 for Visual Studio 2008 by the following link.
Notice that there two options for download, one for VS2010 and one for VS2008, you should download the VS2008 option.
http://sourceforge.net/projects/octave/files/Octave%20Windows%20binaries/Octave%203.6.1%20for%20Windows%20Microsoft%20Visual%20Studio/
2- Install the Octave 3.6.1 on your system in the following directory (which contains NO white spaces):
C:\Software\Octave-3.6.1
3- While installing, on the installation wizard, select all the available packages of the Octave 3.6.1 to be installed, also select "gnuplot.exe" as graphics engine.
4- After installing Octave 3.6.1, include the Octave 3.6.1 header files in your C++ code like below:
#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/config.h>
5- Configure your VS2008:
Add the following directories to "Property Pages > Configuration Properties > C/C++ > General >Additional Include Directories:"
C:\Software\Octave-3.6.1\include
C:\Software\Octave-3.6.1\include\octave-3.6.1
6- Configure your VS2008:
Add the following directories to "Property Pages > Configuration Properties > Linker > General > Additional Library Directories:"
C:\Software\Octave-3.6.1\lib
C:\Software\Octave-3.6.1\lib\octave\3.6.1
7- Configure your VS2008:
Change the "Property pages > Configuration Properties > Linker > General > Enable Incremental Linking" to "No."
8- Configure your VS2008:
Add the following files to "Property Pages > Configuration Properties > Linker > Input > Additional Dependencies:"
octave.lib
octinterp.lib
cruft.lib
9- Configure your VS2008:
Enter the following path to "Property Pages > Configuration Properties > Debugging >
Environment:"
PATH=%PATH%;C:\Software\Octave-3.6.1\bin;
10- Use the following command before loading my DLL:
SetDllDirectory((LPCWSTR)L"C:\\Software\\Octave-3.6.1\\bin\\");
But when I try to use the following steps (2nd method), I have a problem (I'll explain the problem):
The steps of using Octave Libraries in Visual Studio C++ 2008:
1- Download Octave 3.6.1 for Visual Studio 2008 by the following link.
Notice that there two options for download, one for VS2010 and one for VS2008, you should download the VS2008 option.
http://sourceforge.net/projects/octave/files/Octave%20Windows%20binaries/Octave%203.6.1%20for%20Windows%20Microsoft%20Visual%20Studio/
2- Install the Octave 3.6.1 on your system in the following directory (which contains NO white spaces):
C:\Software\Octave-3.6.1
3- While installing, on the installation wizard, select all the available packages of the Octave 3.6.1 to be installed, also select "gnuplot.exe" as graphics engine.
4- After installing Octave 3.6.1, copy the folder "Octave-3.6.1" at the address "C:\Software\Octave-3.6.1" next to the solution file of visual studio 2008 project (*.sln) and then include the Octave 3.6.1 header files in your C++ code like below:
#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/config.h>
5- Configure your VS2008:
Add the following directories to "Property Pages > Configuration Properties > C/C++ > General >Additional Include Directories:"
..\Octave-3.6.1\include
..\Octave-3.6.1\include\octave-3.6.1
6- Configure your VS2008:
Add the following directories to "Property Pages > Configuration Properties > Linker > General > Additional Library Directories:"
..\Octave-3.6.1\lib
..\Octave-3.6.1\lib\octave\3.6.1
7- Configure your VS2008:
Change the "Property pages > Configuration Properties > Linker > General > Enable Incremental Linking" to "No."
8- Configure your VS2008:
Add the following files to "Property Pages > Configuration Properties > Linker > Input > Additional Dependencies:"
octave.lib
octinterp.lib
cruft.lib
9- Configure your VS2008:
Enter the following path to "Property Pages > Configuration Properties > Debugging > Environment:"
PATH=%PATH%;..\Octave-3.6.1\bin;
10- Use the following command before loading my DLL:
SetDllDirectory((LPCWSTR)L"..\\Octave-3.6.1\\bin\\");
The problem is that when I use the 2nd method, it works perfect as far as I keep the installation folder of C:\Software\Octave-3.6.1
untouched. I mean when I rename the installation folder or when I remove it, or when I uninstall Octave, my solution compiles and builds the executable, but when running the executable, it would not generate any results (the results are a bunch of text files and the output files would be empty). I was wondering if anybody knows the reason and a solution. Thanks.
@Andy As Andy requested, I showed below the section of my C++ code which uses Octave as embedded engine. Variables with
m_
prefix are members of theFDD
class for which thegetCPSD
method is implemented below.