Solved

DLL's and Functions

Posted on 1999-01-27
7
841 Views
Last Modified: 2008-02-20
I'm not sure if this is the right area? but here goes anyhow
This allows me to play a wav file using a DLL,

Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

I've used QUIKVIEW to look at the DLL and can locate sndPlaySoundA, the question is how can you find out what else needs to be defined for the function to work VB i.e. where did (ByVal lpszSoundName As String, ByVal uFlags As Long) come from and how do you know what to define them as?

Thanks

Deadmeat
0
Comment
Question by:deadmeat
  • 2
  • 2
  • 2
  • +1
7 Comments
 

Author Comment

by:deadmeat
ID: 1470848
Edited text of question
0
 
LVL 5

Expert Comment

by:kulikuli
ID: 1470849
Where did you get Quickview?
0
 

Accepted Solution

by:
JimKarabatsos earned 200 total points
ID: 1470850
You probably won't like this, but...

You cannot find out the parameters required for the entry points in the DLL just by looking at the dll.  The entry points that are listed in the name table (which is what you were looking at when you dumped the dll or used Quickview) are just the relative addresses of the entry points to the exported procedures in the dll.  The signature of the function, that is, the number, order and type of parameters is expects, are not recorded anywhere.  It is up to the developer of the DLL to provide you with documentation about these functions, either in a manual or in the form of a C header (.h) file or a VB module (.bas) file that contains the various DECLARE statements that are required.  Often, you will still need a short description that defines the meaning, use and context of each of the paramters, as well as if and how to defualt them by passing null pointers/zeros/negative values or whatever.

Occasionally (actually, often), VB will be able to pick up a "bad declare" because the stack becomes corrupted during the call.  This lets the VB run-time know that the total size of the stack as defined in the declare is different to what the DLL function expected.  The runtime has code to be very defensive about calling into DLLs to try and cope with this gracefully.  But it is far from foolproof.

The only way to reverse-engineer a DLL with no documentation is to use the name table to get the entry points, then use a debugger to look at the opcodes in assember mnemonics and try to deduce what the function is doing and how it is using all the stack-relative addresses (that is all the BP-x addresses).

- Jim
0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 13

Expert Comment

by:Mirkwood
ID: 1470851
Here are all the definitions of the function.
Let me know if you need more info.

auxGetDevCaps


Public Declare Sub auxGetDevCaps Lib "winmm.dll" Alias "auxGetDevCapsA" (uDeviceID As Long, lpCaps As AUXCAPS, uSize As Long)

 

auxGetNumDevs


Public Declare Sub auxGetNumDevs Lib "winmm.dll" ()

 

auxGetVolume


Public Declare Sub auxGetVolume Lib "winmm.dll" (uDeviceID As Long, lpdwVolume As Long)

 

auxOutMessage


Public Declare Sub auxOutMessage Lib "winmm.dll" (uDeviceID As Long, msg As Long, dw1 As Long, dw2 As Long)

 

auxSetVolume


Public Declare Sub auxSetVolume Lib "winmm.dll" (uDeviceID As Long, dwVolume As Long)

 

DefDriverProc


Public Declare Sub DefDriverProc Lib "winmm.dll" (dwDriverIdentifier As Long, hdrvr As Long, uMsg As Long, lParam1 As Long, lParam2 As Long)

 

DrvGetModuleHandle


Public Declare Sub DrvGetModuleHandle Lib "winmm.dll" (hDriver As Long)

 

GetDriverModuleHandle


Public Declare Sub GetDriverModuleHandle Lib "winmm.dll" (hDriver As Long)

 

joyGetDevCaps


Public Declare Sub joyGetDevCaps Lib "winmm.dll" Alias "joyGetDevCapsA" (id As Long, lpCaps As JOYCAPS, uSize As Long)

 

joyGetNumDevs


Public Declare Sub joyGetNumDevs Lib "winmm.dll" ()

 

joyGetPos


Public Declare Sub joyGetPos Lib "winmm.dll" (uJoyID As Long, pji As JOYINFO)

 

joyGetThreshold


Public Declare Sub joyGetThreshold Lib "winmm.dll" (id As Long, lpuThreshold As Long)

 

joyReleaseCapture


Public Declare Sub joyReleaseCapture Lib "winmm.dll" (id As Long)

 

joySetCapture


Public Declare Sub joySetCapture Lib "winmm.dll" (hwnd As Long, uID As Long, uPeriod As Long, bChanged As Long)

 

joySetThreshold


Public Declare Sub joySetThreshold Lib "winmm.dll" (id As Long, uThreshold As Long)

 

mciGetCreatorTask


Public Declare Sub mciGetCreatorTask Lib "winmm.dll" (wDeviceID As Long)

 

mciGetDeviceID


Public Declare Sub mciGetDeviceID Lib "winmm.dll" Alias "mciGetDeviceIDA" (lpstrName As String)

 

mciGetDeviceIDFromElementID


Public Declare Sub mciGetDeviceIDFromElementID Lib "winmm.dll" Alias "mciGetDeviceIDFromElementIDA" (dwElementID As Long, lpstrType As String)

 

mciGetErrorString


Public Declare Sub mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (dwError As Long, lpstrBuffer As String, uLength As Long)

 

mciGetYieldProc


Public Declare Sub mciGetYieldProc Lib "winmm.dll" (mciId As Long, pdwYieldData As Long)

 

mciSendCommand


Public Declare Sub mciSendCommand Lib "winmm.dll" Alias "mciSendCommandA" (wDeviceID As Long, uMessage As Long, dwParam1 As Long, dwParam2 As Long)

 

mciSendString


Public Declare Sub mciSendString Lib "winmm.dll" Alias "mciSendStringA" (lpstrCommand As String, lpstrReturnString As String, uReturnLength As Long, hwndCallback As Long)

 

mciSetYieldProc


Public Declare Sub mciSetYieldProc Lib "winmm.dll" (mciId As Long, fpYieldProc As Long, dwYieldData As Long)

 

midiConnect


Public Declare Sub midiConnect Lib "winmm.dll" (hmi As Long, hmo As Long, pReserved As Any)

 

midiDisconnect


Public Declare Sub midiDisconnect Lib "winmm.dll" (hmi As Long, hmo As Long, pReserved As Any)

 

midiInAddBuffer


Public Declare Sub midiInAddBuffer Lib "winmm.dll" (hMidiIn As Long, lpMidiInHdr As MIDIHDR, uSize As Long)

 

midiInClose


Public Declare Sub midiInClose Lib "winmm.dll" (hMidiIn As Long)

 

midiInGetDevCaps


Public Declare Sub midiInGetDevCaps Lib "winmm.dll" Alias "midiInGetDevCapsA" (uDeviceID As Long, lpCaps As MIDIINCAPS, uSize As Long)

 

midiInGetErrorText


Public Declare Sub midiInGetErrorText Lib "winmm.dll" Alias "midiInGetErrorTextA" (err As Long, lpText As String, uSize As Long)

 

midiInGetID


Public Declare Sub midiInGetID Lib "winmm.dll" (hMidiIn As Long, lpuDeviceID As Long)

 

midiInGetNumDevs


Public Declare Sub midiInGetNumDevs Lib "winmm.dll" ()

 

midiInMessage


Public Declare Sub midiInMessage Lib "winmm.dll" (hMidiIn As Long, msg As Long, dw1 As Long, dw2 As Long)

 

midiInOpen


Public Declare Sub midiInOpen Lib "winmm.dll" (lphMidiIn As Long, uDeviceID As Long, dwCallback As Long, dwInstance As Long, dwFlags As Long)

 

midiInPrepareHeader


Public Declare Sub midiInPrepareHeader Lib "winmm.dll" (hMidiIn As Long, lpMidiInHdr As MIDIHDR, uSize As Long)

 

midiInReset


Public Declare Sub midiInReset Lib "winmm.dll" (hMidiIn As Long)

 

midiInStart


Public Declare Sub midiInStart Lib "winmm.dll" (hMidiIn As Long)

 

midiInStop


Public Declare Sub midiInStop Lib "winmm.dll" (hMidiIn As Long)

 

midiInUnprepareHeader


Public Declare Sub midiInUnprepareHeader Lib "winmm.dll" (hMidiIn As Long, lpMidiInHdr As MIDIHDR, uSize As Long)

 

midiOutCacheDrumPatches


Public Declare Sub midiOutCacheDrumPatches Lib "winmm.dll" (hMidiOut As Long, uPatch As Long, lpKeyArray As Long, uFlags As Long)

 

midiOutCachePatches


Public Declare Sub midiOutCachePatches Lib "winmm.dll" (hMidiOut As Long, uBank As Long, lpPatchArray As Long, uFlags As Long)

 

midiOutClose


Public Declare Sub midiOutClose Lib "winmm.dll" (hMidiOut As Long)

 

midiOutGetDevCaps


Public Declare Sub midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" (uDeviceID As Long, lpCaps As MIDIOUTCAPS, uSize As Long)

 

midiOutGetErrorText


Public Declare Sub midiOutGetErrorText Lib "winmm.dll" Alias "midiOutGetErrorTextA" (err As Long, lpText As String, uSize As Long)

 

midiOutGetID


Public Declare Sub midiOutGetID Lib "winmm.dll" (hMidiOut As Long, lpuDeviceID As Long)

 

midiOutGetNumDevs


Public Declare Sub midiOutGetNumDevs Lib "winmm.dll" ()

 

midiOutGetVolume


Public Declare Sub midiOutGetVolume Lib "winmm.dll" (uDeviceID As Long, lpdwVolume As Long)

 

midiOutLongMsg


Public Declare Sub midiOutLongMsg Lib "winmm.dll" (hMidiOut As Long, lpMidiOutHdr As MIDIHDR, uSize As Long)

 

midiOutMessage


Public Declare Sub midiOutMessage Lib "winmm.dll" (hMidiOut As Long, msg As Long, dw1 As Long, dw2 As Long)

 

midiOutOpen


Public Declare Sub midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, uDeviceID As Long, dwCallback As Long, dwInstance As Long, dwFlags As Long)

 

midiOutPrepareHeader


Public Declare Sub midiOutPrepareHeader Lib "winmm.dll" (hMidiOut As Long, lpMidiOutHdr As MIDIHDR, uSize As Long)

 

midiOutReset


Public Declare Sub midiOutReset Lib "winmm.dll" (hMidiOut As Long)

 

midiOutSetVolume


Public Declare Sub midiOutSetVolume Lib "winmm.dll" (uDeviceID As Long, dwVolume As Long)

 

midiOutShortMsg


Public Declare Sub midiOutShortMsg Lib "winmm.dll" (hMidiOut As Long, dwMsg As Long)

 

midiOutUnprepareHeader


Public Declare Sub midiOutUnprepareHeader Lib "winmm.dll" (hMidiOut As Long, lpMidiOutHdr As MIDIHDR, uSize As Long)

 

midiStreamClose


Public Declare Sub midiStreamClose Lib "winmm.dll" (hms As Long)

 

midiStreamOpen


Public Declare Sub midiStreamOpen Lib "winmm.dll" (phms As Long, puDeviceID As Long, cMidi As Long, dwCallback As Long, dwInstance As Long, fdwOpen As Long)

 

midiStreamOut


Public Declare Sub midiStreamOut Lib "winmm.dll" (hms As Long, pmh As MIDIHDR, cbmh As Long)

 

midiStreamPause


Public Declare Sub midiStreamPause Lib "winmm.dll" (hms As Long)

 

midiStreamPosition


Public Declare Sub midiStreamPosition Lib "winmm.dll" (hms As Long, lpmmt As MMTIME, cbmmt As Long)

 

midiStreamProperty


Public Declare Sub midiStreamProperty Lib "winmm.dll" (hms As Long, lppropdata As Byte, dwProperty As Long)

 

midiStreamRestart


Public Declare Sub midiStreamRestart Lib "winmm.dll" (hms As Long)

 

midiStreamStop


Public Declare Sub midiStreamStop Lib "winmm.dll" (hms As Long)

 

mixerClose


Public Declare Sub mixerClose Lib "winmm.dll" (hmx As Long)

 

mixerGetControlDetails


Public Declare Sub mixerGetControlDetails Lib "winmm.dll" Alias "mixerGetControlDetailsA" (hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, fdwDetails As Long)

 

mixerGetDevCaps


Public Declare Sub mixerGetDevCaps Lib "winmm.dll" Alias "mixerGetDevCapsA" (uMxId As Long, pmxcaps As MIXERCAPS, cbmxcaps As Long)

 

mixerGetID


Public Declare Sub mixerGetID Lib "winmm.dll" (hmxobj As Long, pumxID As Long, fdwId As Long)

 

mixerGetLineControls


Public Declare Sub mixerGetLineControls Lib "winmm.dll" Alias "mixerGetLineControlsA" (hmxobj As Long, pmxlc As MIXERLINECONTROLS, fdwControls As Long)

 

mixerGetLineInfo


Public Declare Sub mixerGetLineInfo Lib "winmm.dll" Alias "mixerGetLineInfoA" (hmxobj As Long, pmxl As MIXERLINE, fdwInfo As Long)

 

mixerGetNumDevs


Public Declare Sub mixerGetNumDevs Lib "winmm.dll" ()

 

mixerMessage


Public Declare Sub mixerMessage Lib "winmm.dll" (hmx As Long, uMsg As Long, dwParam1 As Long, dwParam2 As Long)

 

mixerOpen


Public Declare Sub mixerOpen Lib "winmm.dll" (phmx As Long, uMxId As Long, dwCallback As Long, dwInstance As Long, fdwOpen As Long)

 

mixerSetControlDetails


Public Declare Sub mixerSetControlDetails Lib "winmm.dll" (hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, fdwDetails As Long)

 

mmioAdvance


Public Declare Sub mmioAdvance Lib "winmm.dll" (hmmio As Long, lpmmioinfo As MMIOINFO, uFlags As Long)

 

mmioAscend


Public Declare Sub mmioAscend Lib "winmm.dll" (hmmio As Long, lpck As MMCKINFO, uFlags As Long)

 

mmioClose


Public Declare Sub mmioClose Lib "winmm.dll" (hmmio As Long, uFlags As Long)

 

mmioCreateChunk


Public Declare Sub mmioCreateChunk Lib "winmm.dll" (hmmio As Long, lpck As MMCKINFO, uFlags As Long)

 

mmioDescend


Public Declare Sub mmioDescend Lib "winmm.dll" (hmmio As Long, lpck As MMCKINFO, lpckParent As MMCKINFO, uFlags As Long)

 

mmioFlush


Public Declare Sub mmioFlush Lib "winmm.dll" (hmmio As Long, uFlags As Long)

 

mmioGetInfo


Public Declare Sub mmioGetInfo Lib "winmm.dll" (hmmio As Long, lpmmioinfo As MMIOINFO, uFlags As Long)

 

mmioOpen


Public Declare Sub mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (szFileName As String, lpmmioinfo As MMIOINFO, dwOpenFlags As Long)

 

mmioRead


Public Declare Sub mmioRead Lib "winmm.dll" (hmmio As Long, pch As String, cch As Long)

 

mmioRename


Public Declare Sub mmioRename Lib "winmm.dll" Alias "mmioRenameA" (szFileName As String, SzNewFileName As String, lpmmioinfo As MMIOINFO, dwRenameFlags As Long)

 

mmioSeek


Public Declare Sub mmioSeek Lib "winmm.dll" (hmmio As Long, lOffset As Long, iOrigin As Long)

 

mmioSendMessage


Public Declare Sub mmioSendMessage Lib "winmm.dll" (hmmio As Long, uMsg As Long, lParam1 As Long, lParam2 As Long)

 

mmioSetBuffer


Public Declare Sub mmioSetBuffer Lib "winmm.dll" (hmmio As Long, pchBuffer As String, cchBuffer As Long, uFlags As Long)

 

mmioSetInfo


Public Declare Sub mmioSetInfo Lib "winmm.dll" (hmmio As Long, lpmmioinfo As MMIOINFO, uFlags As Long)

 

mmioStringToFOURCC


Public Declare Sub mmioStringToFOURCC Lib "winmm.dll" Alias "mmioStringToFOURCCA" (sz As String, uFlags As Long)

 

mmioWrite


Public Declare Sub mmioWrite Lib "winmm.dll" (hmmio As Long, pch As String, cch As Long)

 

mmsystemGetVersion


Public Declare Sub mmsystemGetVersion Lib "winmm.dll" ()

 

PlaySound


Public Declare Sub PlaySound Lib "winmm.dll" Alias "PlaySoundA" (lpszName As String, hModule As Long, dwFlags As Long)

 

sndPlaySound


Public Declare Sub sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As String, uFlags As Long)

 

timeBeginPeriod


Public Declare Sub timeBeginPeriod Lib "winmm.dll" (uPeriod As Long)

 

timeEndPeriod


Public Declare Sub timeEndPeriod Lib "winmm.dll" (uPeriod As Long)

 

timeGetDevCaps


Public Declare Sub timeGetDevCaps Lib "winmm.dll" (lpTimeCaps As TIMECAPS, uSize As Long)

 

timeGetSystemTime


Public Declare Sub timeGetSystemTime Lib "winmm.dll" (lpTime As MMTIME, uSize As Long)

 

timeGetTime


Public Declare Sub timeGetTime Lib "winmm.dll" ()

 

timeKillEvent


Public Declare Sub timeKillEvent Lib "winmm.dll" (uID As Long)

 

timeSetEvent


Public Declare Sub timeSetEvent Lib "winmm.dll" (uDelay As Long, uResolution As Long, lpFunction As Long, dwUser As Long, uFlags As Long)

 

waveInAddBuffer


Public Declare Sub waveInAddBuffer Lib "winmm.dll" (hWaveIn As Long, lpWaveInHdr As WAVEHDR, uSize As Long)

 

waveInClose


Public Declare Sub waveInClose Lib "winmm.dll" (hWaveIn As Long)

 

waveInGetDevCaps


Public Declare Sub waveInGetDevCaps Lib "winmm.dll" Alias "waveInGetDevCapsA" (uDeviceID As Long, lpCaps As WAVEINCAPS, uSize As Long)

 

waveInGetErrorText


Public Declare Sub waveInGetErrorText Lib "winmm.dll" Alias "waveInGetErrorTextA" (err As Long, lpText As String, uSize As Long)

 

waveInGetID


Public Declare Sub waveInGetID Lib "winmm.dll" (hWaveIn As Long, lpuDeviceID As Long)

 

waveInGetNumDevs


Public Declare Sub waveInGetNumDevs Lib "winmm.dll" ()

 

waveInGetPosition


Public Declare Sub waveInGetPosition Lib "winmm.dll" (hWaveIn As Long, lpInfo As MMTIME, uSize As Long)

 

waveInMessage


Public Declare Sub waveInMessage Lib "winmm.dll" (hWaveIn As Long, msg As Long, dw1 As Long, dw2 As Long)

 

waveInOpen


Public Declare Sub waveInOpen Lib "winmm.dll" (lphWaveIn As Long, uDeviceID As Long, lpFormat As WAVEFORMAT, dwCallback As Long, dwInstance As Long, dwFlags As Long)

 

waveInPrepareHeader


Public Declare Sub waveInPrepareHeader Lib "winmm.dll" (hWaveIn As Long, lpWaveInHdr As WAVEHDR, uSize As Long)

 

waveInReset


Public Declare Sub waveInReset Lib "winmm.dll" (hWaveIn As Long)

 

waveInStart


Public Declare Sub waveInStart Lib "winmm.dll" (hWaveIn As Long)

 

waveInStop


Public Declare Sub waveInStop Lib "winmm.dll" (hWaveIn As Long)

 

waveInUnprepareHeader


Public Declare Sub waveInUnprepareHeader Lib "winmm.dll" (hWaveIn As Long, lpWaveInHdr As WAVEHDR, uSize As Long)

 

waveOutBreakLoop


Public Declare Sub waveOutBreakLoop Lib "winmm.dll" (hWaveOut As Long)

 

waveOutClose


Public Declare Sub waveOutClose Lib "winmm.dll" (hWaveOut As Long)

 

waveOutGetDevCaps


Public Declare Sub waveOutGetDevCaps Lib "winmm.dll" Alias "waveOutGetDevCapsA" (uDeviceID As Long, lpCaps As WAVEOUTCAPS, uSize As Long)

 

waveOutGetErrorText


Public Declare Sub waveOutGetErrorText Lib "winmm.dll" Alias "waveOutGetErrorTextA" (err As Long, lpText As String, uSize As Long)

 

waveOutGetID


Public Declare Sub waveOutGetID Lib "winmm.dll" (hWaveOut As Long, lpuDeviceID As Long)

 

waveOutGetNumDevs


Public Declare Sub waveOutGetNumDevs Lib "winmm.dll" ()

 

waveOutGetPitch


Public Declare Sub waveOutGetPitch Lib "winmm.dll" (hWaveOut As Long, lpdwPitch As Long)

 

waveOutGetPlaybackRate


Public Declare Sub waveOutGetPlaybackRate Lib "winmm.dll" (hWaveOut As Long, lpdwRate As Long)

 

waveOutGetPosition


Public Declare Sub waveOutGetPosition Lib "winmm.dll" (hWaveOut As Long, lpInfo As MMTIME, uSize As Long)

 

waveOutGetVolume


Public Declare Sub waveOutGetVolume Lib "winmm.dll" (uDeviceID As Long, lpdwVolume As Long)

 

waveOutMessage


Public Declare Sub waveOutMessage Lib "winmm.dll" (hWaveOut As Long, msg As Long, dw1 As Long, dw2 As Long)

 

waveOutOpen


Public Declare Sub waveOutOpen Lib "winmm.dll" (lphWaveOut As Long, uDeviceID As Long, lpFormat As WAVEFORMAT, dwCallback As Long, dwInstance As Long, dwFlags As Long)

 

waveOutPause


Public Declare Sub waveOutPause Lib "winmm.dll" (hWaveOut As Long)

 

waveOutPrepareHeader


Public Declare Sub waveOutPrepareHeader Lib "winmm.dll" (hWaveOut As Long, lpWaveOutHdr As WAVEHDR, uSize As Long)

 

waveOutReset


Public Declare Sub waveOutReset Lib "winmm.dll" (hWaveOut As Long)

 

waveOutRestart


Public Declare Sub waveOutRestart Lib "winmm.dll" (hWaveOut As Long)

 

waveOutSetPitch


Public Declare Sub waveOutSetPitch Lib "winmm.dll" (hWaveOut As Long, dwPitch As Long)

 

waveOutSetPlaybackRate


Public Declare Sub waveOutSetPlaybackRate Lib "winmm.dll" (hWaveOut As Long, dwRate As Long)

 

waveOutSetVolume


Public Declare Sub waveOutSetVolume Lib "winmm.dll" (uDeviceID As Long, dwVolume As Long)

 

waveOutUnprepareHeader


Public Declare Sub waveOutUnprepareHeader Lib "winmm.dll" (hWaveOut As Long, lpWaveOutHdr As WAVEHDR, uSize As Long)

 

waveOutWrite


Public Declare Sub waveOutWrite Lib "winmm.dll" (hWaveOut As Long, lpWaveOutHdr As WAVEHDR, uSize As Long)

 

0
 

Author Comment

by:deadmeat
ID: 1470852
Thanks
0
 
LVL 13

Expert Comment

by:Mirkwood
ID: 1470853
Why the hell was this answer accepted?
0
 
LVL 5

Expert Comment

by:kulikuli
ID: 1470854
where did you download quickview?
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction I needed to skip over some file processing within a For...Next loop in some old production code and wished that VB (classic) had a statement that would drop down to the end of the current iteration, bypassing the statements that were c…
The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now