Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
28520 Discussions

No console window when running dll

mnering
Beginner
708 Views
Why is it that when I execute a dll from vb, a console window flashes up on my screen? How can I make it not do that?
0 Kudos
10 Replies
Steven_L_Intel1
Employee
708 Views
Normally, it doesn't. In fact, a DLL has no console of its own. Perhaps something in your DLL code is creating a console?

Steve
0 Kudos
mnering
Beginner
708 Views
Thanks Steve,

I wonder if there is something in my project settings that will cause a console window to open? BTW I too am in NH ... Dover.

Mike
0 Kudos
Steven_L_Intel1
Employee
708 Views
Not in a DLL project... Can you figure out what line of code is executing in your DLL when this window appears? Are you sure it's a console window?

Steve
0 Kudos
mnering
Beginner
708 Views
I'm guessing that it might be a SYSTEMQQ command.
0 Kudos
Steven_L_Intel1
Employee
708 Views
That would do it! Look into using CreateProcess or perhaps ShellExecute as an alternative.

Steve
0 Kudos
mnering
Beginner
708 Views
Steve,

Okay ... I've tried to figure out the CREATEPROCESS and the SHELLEXECUTE, and I can't seem to find any information on this. Do you have any suggestions?

Mike
0 Kudos
james1
Beginner
708 Views
You can always go to http://msdn.microsoft.com for documentation on system routines. Here is an example with CreateProcess:
program example
use dfwbase
use kernel32
implicit none
type (T_STARTUPINFO) si
type (T_PROCESS_INFORMATION) pi
call ZeroMemory (LOC(si), SIZEOF(si))
call ZeroMemory (LOC(pi), SIZEOF(pi))
si%cb = SIZEOF (si)
si%dwFlags = STARTF_USESTDHANDLES
if (CreateProcess(NULL,'notepad junk.txt'c,NULL,NULL,FALSE, &
      DETACHED_PROCESS,NULL,NULL,si,pi) /= 0) then
  print *, 'Process created', pi%dwProcessId
else
  print *, 'CreateProcess error', GetLastError()
end if
end program example
James
0 Kudos
Steven_L_Intel1
Employee
708 Views
There's also examples in two issues of the Visual Fortran Newsletter - one on each routine.

Steve
0 Kudos
mnering
Beginner
708 Views
Okay ... I copied the code from the example and I get all sorts of compile errors about the actual arguments not matching dummy argument type. Here's my code ... let me know what you think.

program MIKE
use kernel32
implicit none

INTEGER INSTANCE,X
type (T_STARTUPINFO) si
type (T_PROCESS_INFORMATION) pi
call ZeroMemory (LOC(si), SIZEOF(si))
call ZeroMemory (LOC(pi), SIZEOF(pi))
si%cb = SIZEOF (si)
si%dwFlags = STARTF_USESTDHANDLES

INSTANCE=CreateProcessNULL,'C:WINNTNOTEPAD',NULL,NULL,&
FALSE,DETACHED_PROCESS,NULL,NULL,si,pi)

end program MIKE
0 Kudos
james1
Beginner
708 Views
You are missing a "(" in the CreateProcess call. Also you shouldn't need to put the path in for Notepad, and that needs to be a C string as in the example.

James
0 Kudos
Reply