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

Re: [TRNSYS-users] creating new type with freeware fortran compiler g95



keilholz, werner schrieb:
Dear Frank,

In principle, your approach should work (I agree with a previous post saying that the type number should not be 151 to avoid conflicts with existing components; Numbers > 200 should be fine).

A good way to check if your Dll is generated correctly is to use a dependency walker. You can get a free one at http://www.dependencywalker.com/

This tool allows listing the functions provided by the DLL. It should show one with the name of your type (e.g. TYPE201), with the following attributes:
1. E^= C
2. Ordinal = 1, Hint = 0 (shouldn't really matter if it is different)
3. Function = TYPE201

4. Entry point = some number

If the function does not show up at all, you should make sure it is exported. If 1. is not "C", you should look up how to change the "calling conventions" to "C" in the manual of your compiler.
Hope this helps,

Werner


-----Message d'origine-----
De : Frank Giese [mailto:f.giese@solitem.de] Envoyé : jeudi 29 mai 2008 08:17
À : trnsys-users@engr.wisc.edu
Objet : [TRNSYS-users] creating new type with freeware fortran compiler g95

Hello!
I tried to create a new module by dropping a .dll file into the
.../UserLib/ReleaseDLLs but it didn't work so far:
Simulation Studio had following error messages:

TRNSYS Message 199 : TRNSYS found at least one user DLL in the UserLib
directory. (Note: Only DLL's including Types that are used in the
simulation are loaded)
Reported information  : 0 user DLLs were loaded
after searching in "D:\Programme\Trnsys16_1\UserLib\ReleaseDLLs"

So, TRNSYS found the .dll file but didn't load it up and I don't know why.

How I created the .dll file:
-Precompiling my fortran file (type151.for) including the files: TrnsysConstants.f90, TrnsysFunctions.f90, TrnsysData.f90, typeck.for,messages.f90, linkck.f90. -I had problems with the messages.f90 file, because of the command "use kernel 32". Since it is only for message purpose I deleted this command line including the call RaiseException(EXCEPTION_NONCONTINUABLE_EXCEPTION, 0, 0, 0). After this, there was no problem.
- Compiling the .dll file with the following command line:
g95 -shared -mrtd -o type151.dll type151.for TrnsysConstants.o TrnsysFunctions.o TrnsysData.o typeck.o messages.o linkck.o - Copying this file to the .../UserLib/ReleaseDLLs and starting Simulation Studio with the type 151

My questions:
-Doesn't it work due to the way I created the .dll? or
-Doesn't it work due to some path missing in another file (TRNDLL.lib)?
-Did anybody else figure it out how it works with a free compiler such as watcom or g95?

Thank you in advance,
Frank Giese





Dear Werner,
thank you very much for your reply. With the dependency walker I figured out the problem: My compiler added an underscore to the type201 function, so trnsys wasn't able to read it. I found the command from my compiler (-fno-underscoring) to suppress the underscoring and after recompiling everything worked fine.
So, thanks again,
Frank

--
Frank Giese

SOLITEM GmbH
Süsterfeldstraße 83
52072 Aachen
Germany
phone +49 (0)241 980 906-0
fax   +49 (0)241 980 906-30
www.solitem.de
f.giese@solitem.de

***************************************************************************
Besuchen Sie uns auf der INTERSOLAR vom 12.-14. Juni 2008 in München
(Halle C1, Stand 519).
Visit us at INTERSOLAR in Munich from June 12-14, 2008 (hall C1, booth 519).
***************************************************************************

Geschäftsführer: Dr.-Ing. Ahmet Lokurlu
Sitz der Gesellschaft: 52072 Aachen
Amtsgericht Registergericht Aachen HRB 7865
USt-Id-Nr.: DE200074034