Hi, I've one dll that was made in Fortran. This dll contains the diynamic model of a Sailboat (in fact is a VPP -Velocity Prediction Program-)

In general, the inputs of the dll are 2 integers and 20 floats, as follows: (the name of the dll's function is "DLL_SIMULATEUR")

DLL_SIMULATEUR(int int, float, float ..., float)

the expected answer of the simulator is the same 22 variables in time + delta time.

I can use easily the dll in VB6 as follows:

--- function declaration ---

Private Declare Sub DLL_SIMULATEUR Lib "C:\vpp53.dll" (CodeError As Integer, n As Integer, t As Double, dt As Double, TWS As Double, TWA As Double, ec As Double, Ang As Double, _
X As Double, Y As Double, z As Double, psi As Double, teta As Double, phi As Double, _
Vx As Double, Vy As Double, vz As Double, omx As Double, omy As Double, omz As Double, Course As Double, Cap_Compass As Double, Leeway As Double, MomentSafran As Double)


--- call to dll ---
Call DLL_SIMULATEUR(CodeErreur, n, t, dt, TWS, TWA, ec, Ang, X, Y, z, psi, teta, phi, Vx, Vy, vz, omx, omy, omz, Course, Cap_Compass, Leeway, MomentSafran)

and the updated values are saved in the same variables,
for example, t <<time>>, if I send t=1, then after call the dll, t is going to be 2.

Another case. If I use it in matlab, the .h file is as follows:

#ifndef simul_h
#define simul_h
EXPORTED_FUNCTION double __stdcall simul(int*, int*, double*, double*,..., double*);
#endif

and the dll's call is like this: (this is in the .m file)


loadlibrary('VPP53.dll','SIMUL_V100.h');

[a0,input1,input2,input3...input22]=calllib('SIMUL_V100','simul',Val1,Val2,Val3...Val22);
unloadlibrary('VPP53.dll')

where a0 is a ptr from matlab (i dont use it, but anyway, I must to put a variable to recive it), Input1, Input2, Val1 and Val2 are integers, and the rest, are doubles (in matlab, floats in C++)...

All that thing works fine, but, when I try to use the dll from VC++ (VS 2008), I can link the dll and send the data.. but I can't get the returned data.

The code in C++ that I'm using is:

// Test3.cpp*: définit le point d'entrée pour l'application console.
//
#include "stdafx.h"
#include "iostream"
#include <time.h>
#include <windows.h>
#include <winbase.h>


typedef void (__stdcall *SimulateurFunc)( int*, int*, float*,float*,float*,float*,float*,float*,float*,float*,float*,float*,float*,float*,float*,
float*,float*,float*,float*,float*,float*,float*,float*,float*);//


int CodeErrDll, n;
float t,Dt,Tws,Twa,AngleBoom,AngleSafran,X,Y,Z,Psi,Teta,Phi,Vx,Vy,Vz,Omx,Omy,Omz,Course,CapCompas,Leeway,MomentMecheSafran;


int main()
{
n=1; //Numero de iteraciones de la funcion
Dt=0.1; // Diferencial de tiempo
// t = tiempo total de simulacion : t = n * Dt


SimulateurFunc _SIMULATEUR;

HINSTANCE hInstLibrary;
hInstLibrary= LoadLibrary(_T("vpp53.dll"));
if (hInstLibrary)
{
_SIMULATEUR = (SimulateurFunc)GetProcAddress(hInstLibrary, "DLL_SIMULATEUR");


if (_SIMULATEUR)
{



_SIMULATEUR(&CodeErrDll,&n,&t,&Dt,&Tws,&Twa,
&AngleBoom,&AngleSafran,&X,&Y,&Z,&Psi,&Teta,
&Phi,&Vx,&Vy,&Vz,&Omx,&Omy,&Omz,&Course,
&CapCompas,&Leeway,&MomentMecheSafran);

FreeLibrary(hInstLibrary);
}
else
{

std::cout << "DLL Failed To Load!" << std::endl;
}
}

printf("Press any Key to Continue\n");
std::cin.get();

return 0;
}



It compiles fine (I know that it compiles doesn't means that it is going to work as i need xD)
but i can't get the updated values that are given by the dll.

What I'm doing wrong???
I'll be very happy if someone can help me.... I'm not good in c++ :S

Thanks a lot!
Miguel

one final remark: I dont have the .h either the .def of the function (as they are not used in VB and Matlab...)