i think its not possible. alternatively you can take a form with the Comm Control and without showing the form( simply by loading ) you can take the reference of the control on the form.
Main Topics
Browse All TopicsHi all!!
I'm trying to write a class module with some functions to communicate with the device attached to the comm port.
I am aware that the MS Comm Control is able to do this with forms but is it possible to use the component using late binding?? i.e. create the instance of the component during runtime as my project does not contain any forms at all
Thanks
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
It is a common VB practice to have a hidden form with several ActiveX controls that require a form. This hidden form just acts as a repository for your form-based controls. In VB.NET this is no longer a problem. Of course VB.NET is only in Beta 2 right now. I assume most companies won't be upgrading until a year from now or so.
If your control shows up in the component window, then it needs a form. If instead, you just have a reference to the type library, and your control does not show up in the component window, then you don't need a form to host the control.
I agree that it is not necessary to drop the control on a form, but it can be very time-consuming/cumbersom. The following example can be used to bring up the common dialog control. Use like 'msgbox fnGetPath("Title")'
I know it's not the control you want, but the amount of code to do it without a form may make you think twice about this
'---------start of code
Private Const ALLFILES = "All Files"
' Declarations for Windows Common Dialogs procedures
Private Type API_OPENFILE
strFilter As String ' Filter string
intFilterIndex As Long ' Initial Filter to display.
strInitialDir As String ' Initial directory for the dialog to open in.
strInitialFile As String ' Initial file name to populate the dialog with.
strDialogTitle As String ' Dialog title
strDefaultExtension As String ' Default extension to append to file if user didn't specify one.
lngFlags As Long ' Flags (see constant list) to be used.
strFullPathReturned As String ' Full path of file picked.
strFileNameReturned As String ' File name of file picked.
intFileOffset As Integer ' Offset in full path (strFullPathReturned) where the file name (strFileNameReturned) begins.
intFileExtension As Integer ' Offset in full path (strFullPathReturned) where the file extension begins.
End Type
Private Type API_WINOPENFILENAME
lStructSize As Long
hWndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustrFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustrData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Declare Function API_GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" _
(pOpenfilename As API_WINOPENFILENAME) _
As Boolean
Public Function fnGetPath(strTitle As String) As String
' Comments : Simple file open routine. For additional options, use GetFileOpenEX()
' Parameters: strInitialDir - path for the initial directory, or blank for the current directory
' strTitle - title for the dialog
' Returns : string path, name and extension of the file selected
'
Dim fOK As Boolean
Dim typWinOpen As API_WINOPENFILENAME
Dim typOpenFile As API_OPENFILE
Dim strFilter As String
Dim strInitialDir As String
On Error GoTo PROC_ERR
strInitialDir = CurDir
' Set reasonable defaults for the structure
strFilter = CreateFilterString("Word Files (*.doc)", "*.doc", "Text Files (*.txt)", "*.txt", "Excel Files (*.xls)", "*.xls")
If strInitialDir <> "" Then
typOpenFile.strInitialDir = strInitialDir
Else
typOpenFile.strInitialDir = CurDir()
End If
If strTitle <> "" Then
typOpenFile.strDialogTitle
End If
typOpenFile.strFilter = strFilter
typOpenFile.lngFlags = &H1000 Or &H1
' Convert the structure to a Win structure
Convert2Win typOpenFile, typWinOpen
' Call the Common dialog
fOK = API_GetSaveFileName(typWin
' Convert the Win structure back to a structure
ConvertWin2 typWinOpen, typOpenFile
fnGetPath = typOpenFile.strFullPathRet
PROC_EXIT:
Exit Function
PROC_ERR:
fnGetPath = ""
Resume PROC_EXIT
End Function
Private Function CreateFilterString(ParamAr
' Comments : Builds a Windows formatted filter string for "file type"
' Parameters: varFilter - parameter array in the format:
' Text, Filter, Text, Filter ...
' Such as:
' "All Files (*.*)", "*.*", "Text Files (*.TXT)", "*.TXT"
' Returns : windows formatted filter string
'
Dim strFilter As String
Dim intCounter As Integer
Dim intParamCount As Integer
On Error GoTo PROC_ERR
' Get the count of paramaters passed to the function
intParamCount = UBound(varFilt)
If (intParamCount <> -1) Then
' Count through each parameter
For intCounter = 0 To intParamCount
strFilter = strFilter & varFilt(intCounter) & Chr$(0)
Next
' Check for an even number of parameters
If (intParamCount Mod 2) = 0 Then
strFilter = strFilter & "*.*" & Chr$(0)
End If
End If
CreateFilterString = strFilter
PROC_EXIT:
Exit Function
PROC_ERR:
CreateFilterString = ""
Resume PROC_EXIT
End Function
Private Sub Convert2Win(Struct As API_OPENFILE, Win_Struct As API_WINOPENFILENAME)
' Comments : Converts the passed API structure to a Windows structure
' Parameters: Struct - record of type API_OPENFILE
' Win_Struct - record of type API_WINOPENFILENAME
' Returns : Nothing
'
Dim strFile As String * 512
On Error GoTo PROC_ERR
Win_Struct.hWndOwner = Application.hWndAccessApp
Win_Struct.hInstance = 0
If Struct.strFilter = "" Then
Win_Struct.lpstrFilter = ALLFILES & Chr$(0) & "*.*" & Chr$(0)
Else
Win_Struct.lpstrFilter = Struct.strFilter
End If
Win_Struct.nFilterIndex = Struct.intFilterIndex
If Struct.strInitialFile <> "" Then
Win_Struct.lpstrFile = Struct.strInitialFile & String$(512 - Len(Struct.strInitialFile)
Else
Win_Struct.lpstrFile = String(512, 0)
End If
Win_Struct.nMaxFile = 511
Win_Struct.lpstrFileTitle = String$(512, 0)
Win_Struct.nMaxFileTitle = 511
Win_Struct.lpstrTitle = Struct.strDialogTitle
Win_Struct.lpstrInitialDir
Win_Struct.lpstrDefExt = Struct.strDefaultExtension
Win_Struct.Flags = Struct.lngFlags
Win_Struct.lStructSize = Len(Win_Struct)
PROC_EXIT:
Exit Sub
PROC_ERR:
Resume PROC_EXIT
End Sub
Private Sub ConvertWin2(Win_Struct As API_WINOPENFILENAME, Struct As API_OPENFILE)
' Comments : Converts the passed API structure to a Windows structure
' Parameters: Win_Struct - record of type API_WINOPENFILENAME
' Struct - record of type API_OPENFILE
' Returns : Nothing
'
On Error GoTo PROC_ERR
Struct.strFullPathReturned
Struct.strFileNameReturned
Struct.intFileOffset = Win_Struct.nFileOffset
Struct.intFileExtension = Win_Struct.nFileExtension
PROC_EXIT:
Exit Sub
PROC_ERR:
Resume PROC_EXIT
End Sub
Private Function RemoveNulls(strIn As String) As String
' Comments : Removes terminator from a string
' Parameters: strIn - string to modify
' Return : modified string
'
Dim intChr As Integer
intChr = InStr(strIn, Chr$(0))
If intChr > 0 Then
RemoveNulls = Left$(strIn, intChr - 1)
Else
RemoveNulls = strIn
End If
End Function
'---------end of code
The MSComm control is an ocx and as such requires a container form in order to operate.
Add your MSComm Control to a dummy form and make the forms visible property to false. You can then access all the functionality of the control.
The code above will work only with the common control as it also exposes it's methods through a dll comdlg32.dll
The MSComm control doesn't.
If you want to do this type of thing without the MSComm control. You will have to use other API calls to do it.
Vin.
Business Accounts
Answer for Membership
by: DreamMasterPosted on 2001-08-21 at 02:52:53ID: 6409168
I'm not sure of this, since I have never used the Comm control...but I would say, yes that is possible...
If I am mistaking please correct me folks...
Max.