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?
Normally, it doesn't. In fact, a DLL has no console of its own. Perhaps something in your DLL code is creating a console?
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.
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?
I'm guessing that it might be a SYSTEMQQ command.
That would do it! Look into using CreateProcess or perhaps ShellExecute as an alternative.
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?
You can always go to http://msdn.microsoft.com for documentation on system routines. Here is an example with CreateProcess:
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
print *, 'CreateProcess error', GetLastError()
end program example
There's also examples in two issues of the Visual Fortran Newsletter - one on each routine.
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 MIKEuse kernel32implicit none
INTEGER INSTANCE,Xtype (T_STARTUPINFO) sitype (T_PROCESS_INFORMATION) picall ZeroMemory (LOC(si), SIZEOF(si))call ZeroMemory (LOC(pi), SIZEOF(pi))si%cb = SIZEOF (si)si%dwFlags = STARTF_USESTDHANDLES
end program MIKE
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.