DLL and output screen

DLL and output screen

I use DLL writed with DVF 6.0 and I search to inform the user in screen, when a problem is comming in the datas of the DLL, but the instructions WRITE, TYPE and PRINT occurs errors of execution.
I need help, please.

18 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.

Are you using your dll from VB? If so, there's no console to write to. Either create a console using the AllocConsole API, or pass the information back to VB for it to display.

hth,
John

Johan, would you please be more specific on how to use ALLOCONSOLE. I have the sililar problem too. I use VB to call a DLL written in DVF 5.0 D. I hate to pass info back to VB. Is there any way to dump error message from DLL?

Something like:

! ...
use dfwin
! ...
logical :: bret
! ...
bret = AllocConsole()
! ...
print *, "Blah, blah, blah"
! ...
bret = FreeConsole()
! ...

should do it. FYI, you can also freely write to a file from your dll. IMO, passing the info back to VB is the optimal solution.

hth,
John

Ughh. That last post was on separate lines when I wrote it. And it was on separate lines in the preview window. Double Ughh.

-John

Hello,

Would it be a solution to write error messages to a messagebox? I don't know if this is possible from a DLL, but if it is possible you don't need a console anymore and you don't need to pass back infornation to VB.

Walter Kramer

Yes, a message box, using the MessageBox Win32 API routine, would work well for this. It works in all project types.

Steve

Steve - Intel Developer Support

Steve, Can you post an example how to use messagebox in DLL? I really appreciate that. When I use console, the first time call DLL was ok, but second time, it gives me a GP fault and the program shut off.

I tried the example from reference manual, but I got the following error message:
Error: Error in opening the Library module file. [DFLIB]
use dflib
My codes was copied as below

! Build as QuickWin app 
use dflib 
 message = MESSAGEBOXQQ('Do you want to continue?'C,    & 
           'Matrix'C,   & 
           MB$ICONQUESTION.OR.MB$YESNO.OR.MB$DEFBUTTON1) 
 END 

I am using DF 5.0 D. Is this a problem?

A couple of things. First of all, I didn't say MESSAGEBOXQQ - I said MessageBox. These are two different routines, though they do mostly the same thing. But MESSAGEBOXQQ can be used from within a QuickWin application only.

Next, even given that, you should not have received the error you did - it suggests that Visual Fortran isn't installed correctly. Are you compiling from Developer Studio or a command prompt?

A simple example of a DLL routine that calls MessageBox is:

subroutine mbox
  use dfwin
  implicit none

  !DEC$ ATTRIBUTES DLLEXPORT::mbox

  integer ret

  ret = MessageBox (NULL, "Hi!  I'm a MessageBox!"C,"Sample"C,&
    MB_ICONINFORMATION+MB_OK)

end subroutine mbox
Steve - Intel Developer Support

I am using developer studio. For your example, I got the following error message
--------------------Configuration: test1 - Win32 Debug--------------------
Compiling Fortran...
C:FortranFile est1 est1.f90
C:FortranFile est1 est1.f90(2) : Error: Error in opening the Library module file. [DFWIN]
use dfwin
------^
C:FortranFile est1 est1.f90(6) : Error: This name does not have a type, and must have an explicit type. [MESSAGEBOX]
ret = MessageBox (NULL, "Hi! I'm a MessageBox!"C,"Sample"C,&
--------^
Error executing df.exe.

test1.dll - 2 error(s), 0 warning(s)

It would appear that either you do not have the standard modules installed or your INCLUDE path is wrong. Go to Tools..Options..Directories..Show Directories for..Include files. There should be a path listed that ends with DFINCLUDE, and if you look at that folder (usually Program FilesDevStudioDFINCLUDE) it should contain DFWIN.MOD.

Steve

Steve - Intel Developer Support

Thank you Steve. I did make a mistake in tools path. I also check the files you mentioned. DFwin.f90 and DFwin.mod are in correct directory. But it is still not working. Is it because my DF is 5.0 D? messagebox is not in help key word. Can you take a look? Thank you again. The error message is as below
--------------------Configuration: FCALL - Win32 Debug--------------------
Compiling Fortran...
C:FortranFileFcallFcall.f90
C:FortranFileFcallFcall.f90(21) : Error: The type of the actual argument differs from the type of the dummy argument. ['Do you want to continue?
message = MESSAGEBOX('Do you want to continue?'C, 'Matrix'C, MB$DEFBUTTON1)
---------------------^
C:FortranFileFcallFcall.f90(21) : Error: The type of the actual argument differs from the type of the dummy argument. [MB$DEFBUTTON1]
message = MESSAGEBOX('Do you want to continue?'C, 'Matrix'C, MB$DEFBUTTON1)
-------------------------------------------------------------^
C:FortranFileFcallFcall.f90(21) : Error: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [UTYPE]
message = MESSAGEBOX('Do you want to continue?'C, 'Matrix'C, MB$DEFBUTTON1)
----------^
Error executing df.exe.

FCALL.dll - 3 error(s), 0 warning(s)

The error message should have tipped you off:
"Error: A non-optional actual argument must be present when invoking a procedure with an explicit interface."
You are missing an argument. Steve's sample shows 4 arguments and your implementation only three.

Sorry Steve for interrupting, but I couldn't resist

Walter Kramer

Walter, I don't think that was a problem. I copied Steve's code and ran. Here is the error message.
--------------------Configuration: test7 - Win32 Debug--------------------
Compiling Fortran...
C:FortranFile est7 est7.f90
Linking...
Creating library Debug/test7.lib and object Debug/test7.exp
test7.obj : error LNK2001: unresolved external symbol _MessageBoxA@16
Debug/test7.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

test7.dll - 2 error(s), 0 warning(s)

I am new with DF, please give me some advise.

Try adding this to your (Steve's) source:
!DEC$OBJCOMMENT LIB:"USER32.LIB"

hth,
John

John, it works now. Thanks a lot.

Thanks for the assist, John. I forgot that that might be needed in V5 (it's not in V6).

Steve

Steve - Intel Developer Support

Kommentar hinterlassen

Bitte anmelden, um einen Kommentar hinzuzufügen. Sie sind noch nicht Mitglied? Jetzt teilnehmen