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

No console window when running dll

mnering
初學者
697 檢視
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 積分
10 回應
Steven_L_Intel1
697 檢視
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
mnering
初學者
697 檢視
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
Steven_L_Intel1
697 檢視
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
mnering
初學者
697 檢視
I'm guessing that it might be a SYSTEMQQ command.
Steven_L_Intel1
697 檢視
That would do it! Look into using CreateProcess or perhaps ShellExecute as an alternative.

Steve
mnering
初學者
697 檢視
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
james1
初學者
697 檢視
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
Steven_L_Intel1
697 檢視
There's also examples in two issues of the Visual Fortran Newsletter - one on each routine.

Steve
mnering
初學者
697 檢視
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
james1
初學者
697 檢視
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
回覆