No console window when running dll

No console window when running dll

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?

11 帖子 / 0 全新
最新文章
如需更全面地了解编译器优化,请参阅优化注意事项

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

Steve - Intel Developer Support

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

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

Steve - Intel Developer Support

I'm guessing that it might be a SYSTEMQQ command.

That would do it! Look into using CreateProcess or perhaps ShellExecute as an alternative.

Steve

Steve - Intel Developer Support

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

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

There's also examples in two issues of the Visual Fortran Newsletter - one on each routine.

Steve

Steve - Intel Developer Support

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

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

登陆并发表评论。