[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [TRNSYS-users] TR: trnsys.h problem with storage functions



Salut Rémi,

 

The _mp_ prefixes are not really required, and I think they are not defined for all functions in the standard TrnDll.

To use these functions from C, you can directly declare the function with the name exported with the

!DEC$ATTRIBUTES DLLEXPORT attribute in the FORTRAN source. Due to FORTRAN conventions, the name given is in capital letters, so

SETSTORAGEVARS could do the trick in your case (instead of TRNSYSFUNCTIONS_mp_SETSTORAGEVARS).

 

I use the free tool from http://www.dependencywalker.com/  on TRNDll.dll to find out.

 

The real question, as I may have mentioned before, is: why would anyone who programs in C want to use these functions?

They were introduced 20 years ago for FORTRAN programmers to mimic static arrays. I think you’re in for much less trouble if you declare local, static arrays in your DLL and handle storage by yourself…

 

Werner

 

De : PERRIER Rémi 226004 [mailto:remi.perrier@cea.fr]
Envoyé : mardi 9 mars 2010 15:09
À : trnsys-users@cae.wisc.edu
Objet : [TRNSYS-users] TR: trnsys.h problem with storage functions

 

Hi,

 

I’ve read some posts talking about the missing storage functions in the trnsys.h file, I tried to add them manually, writing :

 

extern "C" __declspec(dllimport) void   _cdecl TRNSYSFUNCTIONS_mp_SETSTORAGEVARS(double[],int,int[]);

extern "C" __declspec(dllimport) void   _cdecl TRNSYSFUNCTIONS_mp_SETSTORAGESIZE(int,int[]);

extern "C" __declspec(dllimport) void   _cdecl TRNSYSFUNCTIONS_mp_GETSTORAGEVARS(double[],int,int[]);

 

in the “Functions to access TRNSYS global variables” and :

 

#define setStorageVars                  TRNSYSFUNCTIONS_mp_SETSTORAGEVARS

#define setStorageSize                  TRNSYSFUNCTIONS_mp_SETSTORAGESIZE

#define getStorageVars                  TRNSYSFUNCTIONS_mp_GETSTORAGEVARS

 

In the “Short aliases for functions included in module TrnsysFunctions + lowercase variants of kernel routines” part of the trnsys.h file.

But I still get this error message :

 

1>type896.obj : error LNK2019: symbole externe non résolu __imp__TRNSYSFUNCTIONS_mp_SETSTORAGEVARS référencé dans la fonction _TYPE896

1>C:\Program Files\Trnsys16\UserLib\DebugDLLs\Type896Lib.dll : fatal error LNK1120: 1 externes non résolus

 

Do you have any idea of how I could access to those storage functions ?

 

Rémi PERRIER

 

CEA INES

Laboratoire DTS / LETh

Bâtiment PUMA 3, P112

BP 332 - 50, avenue du Lac Léman - 73377 Le Bourget du Lac  FRANCE

Tel : +33 (0)4 79 44 46 49

Mobile : +33 (0)6 76 95 91 86

Email : remi.perrier@cea.fr