- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hey, is there something in FORTRAN (note I am not that experienced with FORTRAN) that is equivalent to the
ON ERROR statement in VB. I am trying to trap unknown or unexpected errors in my DLL so that my VB application does not fail. I would like to pass an ErrorFlag back to VB, but I cannot find anything in FORTRAN that traps just general errors. Anyone out there know how? Thanks
ON ERROR statement in VB. I am trying to trap unknown or unexpected errors in my DLL so that my VB application does not fail. I would like to pass an ErrorFlag back to VB, but I cannot find anything in FORTRAN that traps just general errors. Anyone out there know how? Thanks
Link Copied
9 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There's a chapter or two in the Visual Fortran Programmer's Guide on exception handling - I suggest you read this. Your options are limited when dealing with DLLs, which have no context to hang exception handling on.
Steve
Steve
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steve,
The chapter on exception handling is one of most obscure pieces of fortran documnetation, which perhaps reflects the functionality itself. with the vague understandin it left me with, It was like there are only a few types of errors you can catch and even then you have to do all kinds of complicated things to catch the error instead of something like C--'s try/catch.
I tried the C-wrapper idea once on an inprocess com-dll and the compiler gave all kinds of errors.
I sent this question to vfsupport a very long time ago and noone even acknowledged it.
Is C-wrapper even an option?
If so can you/anyone provide a simple example of its usage aroubd a dll call?
Tim
The chapter on exception handling is one of most obscure pieces of fortran documnetation, which perhaps reflects the functionality itself. with the vague understandin it left me with, It was like there are only a few types of errors you can catch and even then you have to do all kinds of complicated things to catch the error instead of something like C--'s try/catch.
I tried the C-wrapper idea once on an inprocess com-dll and the compiler gave all kinds of errors.
I sent this question to vfsupport a very long time ago and noone even acknowledged it.
Is C-wrapper even an option?
If so can you/anyone provide a simple example of its usage aroubd a dll call?
Tim
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'll admit that exception handling is not the easiest thing to learn or use. You could use a C++ wrapper around your routines, I think.
If you got NO response to a vf-support request, then either we didn't receive it or the e-mail address you sent it from was invalid. Please try again.
Steve
If you got NO response to a vf-support request, then either we didn't receive it or the e-mail address you sent it from was invalid. Please try again.
Steve
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
IMO, the treatment of exception handling in the CVF docs is excellent. There are several samples that illustrate how to put a C++ wrapper around Fortran to trap errors in conjunction with TRACEBACK. It's also possible to write a wrapper in C# and VB.NET and even in VB5/6. I've tried them all and they all work. So keep at it, it'll come.
Ciao,
Gerry T.
Ciao,
Gerry T.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
After reading the error Trapping information in the CVF documentation SEVERAL times, I think I understand about 80% of it. Reading the VB Example was a great help, but I could not try it for myself. I don't have access to a C++ Compiler to compile the wrapper. My project is running on limited budget, buying the C++ compiler is a stretch..To me and my limited experience, this method seemed like a long winded way of doing things. Can you build the Wrapper in VB alone? This would make things sure a lot easier?
Tony
Tony
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Try:
(1) http://archive.devx.com/premier/mgznarch/vbpj/1999/05may99/bb0599.pdf
When your DLL is ready to crash, do a RaiseException API call instead of a STOP and let VB trap the error.
(2)
http://www.wintellect.com/about/instructors/robbins/code.aspx and download CrashFinder 2.1.
BTW, you did debug your DLL in the VS IDE using your VB client, didn't you?
HTH,
Gerry T.
(1) http://archive.devx.com/premier/mgznarch/vbpj/1999/05may99/bb0599.pdf
When your DLL is ready to crash, do a RaiseException API call instead of a STOP and let VB trap the error.
(2)
http://www.wintellect.com/about/instructors/robbins/code.aspx and download CrashFinder 2.1.
BTW, you did debug your DLL in the VS IDE using your VB client, didn't you?
HTH,
Gerry T.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you g.f.Thomas!! I used your link to the "No Exceptions" Article. I followed this example and I was able to catch unexpected errors from my FORTRAN DLL and not crash my VB parent application. Thanks very MUCH!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I would also like to thank g.f.Thomas!!! This is the first really helpful and easy method of exception handling I have seen from VB 6 to a Fortran .dll. It works like a charm.
I have attached a zip file for the project mentioned in the article.
I have attached a zip file for the project mentioned in the article.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Very interesting. But mostly over my head.
But does seem to explain a procedure I have been using successfully for a VB5 program calling either VF or Lahey fortran dll. Also a MS Visual C calling the same.
To quit in the fortran and return to the vb5 or c, I simple use an integer division by zero.
i=0
i=6/i
This is picked up by the vb or c error handler as an integer div by zero. This happens many calls deep in the fortran, but still jumps straight back to the vb. Of course I set an argument in the call to the dll to indicate an error right at the start, and only remove it on no error return
Further info is in the topic in this forum
STOP inside a DLL?
But does seem to explain a procedure I have been using successfully for a VB5 program calling either VF or Lahey fortran dll. Also a MS Visual C calling the same.
To quit in the fortran and return to the vb5 or c, I simple use an integer division by zero.
i=0
i=6/i
This is picked up by the vb or c error handler as an integer div by zero. This happens many calls deep in the fortran, but still jumps straight back to the vb. Of course I set an argument in the call to the dll to indicate an error right at the start, and only remove it on no error return
Further info is in the topic in this forum
STOP inside a DLL?

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page