Microsoft KB Archive/150211

= How To Determine if a Program Is Running as a DLL or an EXE =

Article ID: 150211

Article Last Modified on 7/15/2004

-

APPLIES TO


 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

-



This article was previously published under Q150211



SUMMARY
This article describes how to determine whether Visual Basic is presently running an EXE or DLL program. This is useful to know if both an EXE and a DLL version of a program have been created, and different actions need to take place based on which version is loaded.



MORE INFORMATION
There are several ways to determine whether a running program was loaded as an EXE or DLL.

Method 1 - Place the information in one of the resource stamps
Choose the Options button when making the EXE or DLL. In the Version Information section, select File Description, and type in the type of file to be compiled. To test this in the running program, enter the code below to see a MsgBox with the correct type:

If App.FileDescription = "EXE" Then MsgBox "I am an EXE" ElseIf App.FileDescription = "DLL" Then MsgBox "I am a DLL" End If

Method 2 - Conditional Compilation
If the version information fields are being used, use Conditional Compilation to determine if a program is a DLL or an EXE, as in the following code:

#If EXE Then Msgbox "I am an EXE" #Else MsgBox "I am a DLL" #EndIf

Before compiling the EXE, from the Tools menu, select Options, select Advanced Tab, and type the following in the Conditional Compilation Arguments field:

EXE=1

If a DLL is being compiled, type the following in the Conditional Compilation Arguments field:

EXE=0

In Method 2, code that is not required for a DLL or an EXE is not compiled. This is significant if a DLL and an EXE version of a program need to behave differently.

Method 3 - Use the Windows API to dynamically determine the file extension
If the Instance handle of the program is passed to the GetModuleFileName API function, the full path is returned to the program. Microsoft Visual Basic exposes the hInstance as a property of the App object. For example:

 Start a new project in Visual Basic. Form1 is created by default.  In the General Declarations section of Form1, place the following: Private Declare Function GetModuleFileName Lib "kernel32" Alias _ "GetModuleFileNameA" (ByVal hModule As Long, _     ByVal lpFileName As String, ByVal nSize As Long) As Long

Option Compare Text

  In the Click event of Form1, place the following: Private Sub Form_Click Dim sFilePath As String * 255 Dim sVarFilePath As String Dim sFileExt As String

GetModuleFileName App.hInstance, sFilePath, Len(sFilePath) 'Trim out the trailing characters

sVarFilePath = Trim(sFilePath)

'Capture the file extension sFileExt = Mid(sVarFilePath, Len(sVarFilePath) - 3, 3)

'Make the comparison If sFileExt = "EXE" Then MsgBox "I am an EXE" Else MsgBox "I am a DLL" End If

End Sub

 Compile the program as an EXE. Click on the form, and it correctly informs the user whether it was loaded as an EXE or a DLL.

Additional query words: kbVBp400 kbVBp500 kbVBp600 kbVBp kbdsd kbDSupport KBWIN32SDK KBAPI

Keywords: kbhowto KB150211

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.