Hi,
I'm trying to use the acm APIs in VB.NET. acmStreamOpen always returns
MMSYSERR_INVALF LAG. Here's how I use it :
declaration is :
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l" (ByRef phas As IntPtr,
ByVal had As Long, ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT, ByRef pm_wfxDst As
WAVEFORMATEX, ByRef pwfltr As Long, ByRef dwCallback As Long, ByRef
dwinstance As Long, ByVal fdwOpen As Int32) As Int32
Used like this :
res = acmStreamOpen(m _has, 0&, m_MP3wfxSrc, m_wfxDst, 0&, 0&, 0&,
ACM_STREAMOPENF _NONREALTIME)
It returns 10, so Invalid Flag... the only specified flag is NonRealtime so
it should work for almost any codec. I'm trying to convert from Mp3 to Wave
(PCM) so I really don't see why it fails. Can someone help me please? I
don't think this is a .NET related error, but I'm posting in .net groups
anyway, in case it does.
Thanks
ThunderMusic 14 3522
ThunderMusic wrote: I'm trying to use the acm APIs in VB.NET. acmStreamOpen always returns MMSYSERR_INVALF LAG. Here's how I use it :
declaration is :
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l" (ByRef phas As IntPtr, ByVal had As Long, ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT, ByRef pm_wfxDst As WAVEFORMATEX, ByRef pwfltr As Long, ByRef dwCallback As Long, ByRef dwinstance As Long, ByVal fdwOpen As Int32) As Int32 Used like this :
res = acmStreamOpen(m _has, 0&, m_MP3wfxSrc, m_wfxDst, 0&, 0&, 0&, ACM_STREAMOPENF _NONREALTIME)
Try this:
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l"
(ByRef phas As IntPtr,
ByVal had As IntPtr,
ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT,
ByRef pm_wfxDst As WAVEFORMATEX,
ByVal pwfltr As IntPtr,
ByVal dwCallback As IntPtr,
ByVal dwinstance As IntPtr,
ByVal fdwOpen As Int32) As Int32
res = acmStreamOpen(m _has, 0, m_MP3wfxSrc, m_wfxDst,
0, 0, 0, ACM_STREAMOPENF _NONREALTIME)
If it doesn't like 0, use IntPtr.Zero.
--
// Alessandro Angeli
// MVP :: Digital Media
// a dot angeli at psynet dot net
ThunderMusic wrote: I'm trying to use the acm APIs in VB.NET. acmStreamOpen always returns MMSYSERR_INVALF LAG. Here's how I use it :
declaration is :
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l" (ByRef phas As IntPtr, ByVal had As Long, ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT, ByRef pm_wfxDst As WAVEFORMATEX, ByRef pwfltr As Long, ByRef dwCallback As Long, ByRef dwinstance As Long, ByVal fdwOpen As Int32) As Int32 Used like this :
res = acmStreamOpen(m _has, 0&, m_MP3wfxSrc, m_wfxDst, 0&, 0&, 0&, ACM_STREAMOPENF _NONREALTIME)
Try this:
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l"
(ByRef phas As IntPtr,
ByVal had As IntPtr,
ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT,
ByRef pm_wfxDst As WAVEFORMATEX,
ByVal pwfltr As IntPtr,
ByVal dwCallback As IntPtr,
ByVal dwinstance As IntPtr,
ByVal fdwOpen As Int32) As Int32
res = acmStreamOpen(m _has, 0, m_MP3wfxSrc, m_wfxDst,
0, 0, 0, ACM_STREAMOPENF _NONREALTIME)
If it doesn't like 0, use IntPtr.Zero.
--
// Alessandro Angeli
// MVP :: Digital Media
// a dot angeli at psynet dot net
hi,
now it returns 512, and I don't know what it means...
"Alessandro Angeli [MVP::DigitalMed ia]" <no****@nowhere .in.the.net> a écrit
dans le message de news: ev************* @TK2MSFTNGP10.p hx.gbl... ThunderMusic wrote:
I'm trying to use the acm APIs in VB.NET. acmStreamOpen always returns MMSYSERR_INVALF LAG. Here's how I use it :
declaration is :
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l" (ByRef phas As IntPtr, ByVal had As Long, ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT, ByRef pm_wfxDst As WAVEFORMATEX, ByRef pwfltr As Long, ByRef dwCallback As Long, ByRef dwinstance As Long, ByVal fdwOpen As Int32) As Int32 Used like this :
res = acmStreamOpen(m _has, 0&, m_MP3wfxSrc, m_wfxDst, 0&, 0&, 0&, ACM_STREAMOPENF _NONREALTIME)
Try this:
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l" (ByRef phas As IntPtr, ByVal had As IntPtr, ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT, ByRef pm_wfxDst As WAVEFORMATEX, ByVal pwfltr As IntPtr, ByVal dwCallback As IntPtr, ByVal dwinstance As IntPtr, ByVal fdwOpen As Int32) As Int32
res = acmStreamOpen(m _has, 0, m_MP3wfxSrc, m_wfxDst, 0, 0, 0, ACM_STREAMOPENF _NONREALTIME)
If it doesn't like 0, use IntPtr.Zero.
-- // Alessandro Angeli // MVP :: Digital Media // a dot angeli at psynet dot net
ok, I found the 512 return value means that the conversion is impossible.
The thing is, I'm starting from a mp3 file (96kbps) to a Wave File (44100,
16bits, stereo). Here are the settings I use (I get these with the
acmFormatSugges t Function) :
- m_wfxDst {WAVEFORMATEX} WAVEFORMATEX
cbSize 0 Short
nAvgBytesPerSec 176400 Integer
nBlockAlign 2 Short
nChannels 2 Short
nSamplesPerSec 44100 Integer
wBitsPerSample 16 Short
wFormatTag 1 Short
- m_MP3wfxSrc {MPEGLAYER3WAVE FORMAT} MPEGLAYER3WAVEF ORMAT
fdwFlags 0 Integer
nBlockSize 1 Short
nCodecDelay 0 Short
nFramesPerBlock 1 Short
- wfx {WAVEFORMATEX} WAVEFORMATEX
cbSize 12 Short
nAvgBytesPerSec 12000 Integer
nBlockAlign 0 Short
nChannels 2 Short
nSamplesPerSec 44100 Integer
wBitsPerSample 16 Short
wFormatTag 85 Short
wID 1 Short
Everything seems to be right, so I don't understand why I get this error.
Thanks for the help
ThunderMusic
"ThunderMus ic" <NO.danlat.at.h otmail.com.SPAM > a écrit dans le message de
news: ew************* @TK2MSFTNGP15.p hx.gbl... hi, now it returns 512, and I don't know what it means...
"Alessandro Angeli [MVP::DigitalMed ia]" <no****@nowhere .in.the.net> a écrit dans le message de news: ev************* @TK2MSFTNGP10.p hx.gbl... ThunderMusic wrote:
I'm trying to use the acm APIs in VB.NET. acmStreamOpen always returns MMSYSERR_INVALF LAG. Here's how I use it :
declaration is :
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l" (ByRef phas As IntPtr, ByVal had As Long, ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT, ByRef pm_wfxDst As WAVEFORMATEX, ByRef pwfltr As Long, ByRef dwCallback As Long, ByRef dwinstance As Long, ByVal fdwOpen As Int32) As Int32 Used like this :
res = acmStreamOpen(m _has, 0&, m_MP3wfxSrc, m_wfxDst, 0&, 0&, 0&, ACM_STREAMOPENF _NONREALTIME)
Try this:
Declare Auto Function acmStreamOpen Lib "MsAcm32.dl l" (ByRef phas As IntPtr, ByVal had As IntPtr, ByRef pwfxSrc As MPEGLAYER3WAVEF ORMAT, ByRef pm_wfxDst As WAVEFORMATEX, ByVal pwfltr As IntPtr, ByVal dwCallback As IntPtr, ByVal dwinstance As IntPtr, ByVal fdwOpen As Int32) As Int32
res = acmStreamOpen(m _has, 0, m_MP3wfxSrc, m_wfxDst, 0, 0, 0, ACM_STREAMOPENF _NONREALTIME)
If it doesn't like 0, use IntPtr.Zero.
-- // Alessandro Angeli // MVP :: Digital Media // a dot angeli at psynet dot net
"Error 512 - Not Possible" is the random return when you have upset the
Audio Compression Manager genie <g>.
I think that the WAVEFORMAT for the MPeg3 should have some extra bytes
added at the end of its structure. The only information I have for it
is a note in C / Delphi ...
// define MP3 output format
LPMPEGLAYER3WAV EFORMAT mp3format = (LPMPEGLAYER3WA VEFORMAT) LocalAlloc(
LPTR, maxFormatSize );
mp3format->wfx.cbSize = MPEGLAYER3_WFX_ EXTRA_BYTES;
mp3format->wfx.wFormatT ag = WAVE_FORMAT_MPE GLAYER3;
mp3format->wfx.nChannel s = 2;
mp3format->wfx.nAvgBytesP erSec = 16000;
mp3format->wfx.wBitsPerSa mple = 0;
mp3format->wfx.nBlockAlig n = 1;
mp3format->wfx.nSamplesPe rSec = 44100; // 44.1kHz
mp3format->wID = MPEGLAYER3_ID_M PEG; <-thik this is ok
mp3format->fdwFlags = MPEGLAYER3_FLAG _PADDING_OFF;
mp3format->nBlockSize = MP3_BLOCK_SIZE; // 417
mp3format->nFramesPerBloc k = 1; // MUST BE ONE
mp3format->nCodecDelay = 0; // 0 for LAME or 1393 for fraunh..
// Delphi declaration
TMpegAudioStrea mFormat = packed record
wfx:TWavFormat ;
wID:WORD;
fdwFlags:DWORD;
nBlockSize:WORD ;
nFramesPerBlock :WORD;
nCodecDelay:WOR D;
end;
As you can see the mp3Format includes the WAVEFORMATEX structure and
then adds MPEGLAYER3_WFX_ EXTRA_BYTES extra bytes. I don't know what the
value of this constant is, but it looks like 10 4 (DWord) + 6 (Word *
3).
I also think you may also need the Frauenhofer professional codec if
you are doing quality decoding. I had it in a file named I3codecp.exe
(first letter is eye). If you Google for it you may find it. Just run
it and it installs the codec.
To use ACM you must convert at the same sample rate (which you are). If
you want to change sample rate you have to do a three-stage conversion,
firstly to the same sample rate with different formats, then to
different sample rates at the same format. It makes for great fun with
multiple buffers in one line with multiple ACM streams <g>.
Alan Lloyd
ok, it works now with the good values in nBlockSize and nBlockAlign.... Now
I have a problem farther in the code (when it comes to allocate the
buffers), but it's strictly a .NET problem, so I will post in .NET groups...
thanks a lot
ThunderMusic
<al********@aol .com> a écrit dans le message de news: 11************* ********@g49g20 00...legro ups.com... "Error 512 - Not Possible" is the random return when you have upset the Audio Compression Manager genie <g>.
I think that the WAVEFORMAT for the MPeg3 should have some extra bytes added at the end of its structure. The only information I have for it is a note in C / Delphi ...
// define MP3 output format LPMPEGLAYER3WAV EFORMAT mp3format = (LPMPEGLAYER3WA VEFORMAT) LocalAlloc(
LPTR, maxFormatSize ); mp3format->wfx.cbSize = MPEGLAYER3_WFX_ EXTRA_BYTES; mp3format->wfx.wFormatT ag = WAVE_FORMAT_MPE GLAYER3; mp3format->wfx.nChannel s = 2; mp3format->wfx.nAvgBytesP erSec = 16000; mp3format->wfx.wBitsPerSa mple = 0; mp3format->wfx.nBlockAlig n = 1; mp3format->wfx.nSamplesPe rSec = 44100; // 44.1kHz mp3format->wID = MPEGLAYER3_ID_M PEG; <-thik this is ok mp3format->fdwFlags = MPEGLAYER3_FLAG _PADDING_OFF; mp3format->nBlockSize = MP3_BLOCK_SIZE; // 417 mp3format->nFramesPerBloc k = 1; // MUST BE ONE mp3format->nCodecDelay = 0; // 0 for LAME or 1393 for fraunh..
// Delphi declaration TMpegAudioStrea mFormat = packed record wfx:TWavFormat ; wID:WORD; fdwFlags:DWORD; nBlockSize:WORD ; nFramesPerBlock :WORD; nCodecDelay:WOR D; end;
As you can see the mp3Format includes the WAVEFORMATEX structure and then adds MPEGLAYER3_WFX_ EXTRA_BYTES extra bytes. I don't know what the value of this constant is, but it looks like 10 4 (DWord) + 6 (Word * 3).
I also think you may also need the Frauenhofer professional codec if you are doing quality decoding. I had it in a file named I3codecp.exe (first letter is eye). If you Google for it you may find it. Just run it and it installs the codec.
To use ACM you must convert at the same sample rate (which you are). If you want to change sample rate you have to do a three-stage conversion, firstly to the same sample rate with different formats, then to different sample rates at the same format. It makes for great fun with multiple buffers in one line with multiple ACM streams <g>.
Alan Lloyd al********@aol. com wrote: LPTR, maxFormatSize ); mp3format->wfx.cbSize = MPEGLAYER3_WFX_ EXTRA_BYTES; mp3format->wfx.wFormatT ag = WAVE_FORMAT_MPE GLAYER3; mp3format->wfx.nChannel s = 2; mp3format->wfx.nAvgBytesP erSec = 16000; mp3format->wfx.wBitsPerSa mple = 0; mp3format->wfx.nBlockAlig n = 1; mp3format->wfx.nSamplesPe rSec = 44100; // 44.1kHz mp3format->wID = MPEGLAYER3_ID_M PEG; <-thik this is ok mp3format->fdwFlags = MPEGLAYER3_FLAG _PADDING_OFF; mp3format->nBlockSize = MP3_BLOCK_SIZE; // 417 mp3format->nFramesPerBloc k = 1; // MUST BE ONE mp3format->nCodecDelay = 0; // 0 for LAME or 1393 for fraunh..
- 1393 as nCodedDelay when using the FhG codec is not
necessary (it works even with 0).
- 417 as nBlockSize is only valid for 44KHz/128Kbps/stereo:
it is the actual MP3 frame size and it depends on the
combination of samplerate/bitrate/channels and
nFramesPerBlock
- nFramesPerBlock should allow other values as long as
nBlockSize is also changed accordingly
As you can see the mp3Format includes the WAVEFORMATEX structure and then adds MPEGLAYER3_WFX_ EXTRA_BYTES extra bytes. I don't know what the value of this constant is, but it looks like 10 4 (DWord) + 6 (Word * 3).
From mmreg.h:
#define MPEGLAYER3_WFX_ EXTRA_BYTES 12
I also think you may also need the Frauenhofer professional codec if you are doing quality decoding. I had it in a file named I3codecp.exe (first letter is eye). If you Google for it you may find it. Just run it and it installs the codec.
It is L3CodecP.acm and not I3CodecP.acm (L3 as in Layer3,
that is MP3) and it is also illegal to use without a license
from FhG, which is impossible to get AFAIK. I don't think
there is any difference in quality between the pro codec (P)
and the usual one in Windows (A): the A is simply limited to
a max of 56Kbps/24KHz when encoding, while the P had no
limits.
--
// Alessandro Angeli
// MVP :: Digital Media
// a dot angeli at psynet dot net
ThunderMusic wrote: ok, I found the 512 return value means that the conversion is impossible. The thing is, I'm starting from a mp3 file (96kbps) to a Wave File (44100, 16bits, stereo). Here are the settings I use (I get these with the acmFormatSugges t Function) : - m_wfxDst {WAVEFORMATEX} WAVEFORMATEX cbSize 0 Short nAvgBytesPerSec 176400 Integer nBlockAlign 2 Short nChannels 2 Short nSamplesPerSec 44100 Integer wBitsPerSample 16 Short wFormatTag 1 Short
Are you really sure you got this from acmFormatSugges t()?
With WAVE_FORMAT_PCM audio nBlockAlign must be
nChannels*wBits PerSample/8, that is 4 and not 2.
- m_MP3wfxSrc {MPEGLAYER3WAVE FORMAT} MPEGLAYER3WAVEF ORMAT fdwFlags 0 Integer nBlockSize 1 Short nCodecDelay 0 Short nFramesPerBlock 1 Short - wfx {WAVEFORMATEX} WAVEFORMATEX cbSize 12 Short nAvgBytesPerSec 12000 Integer nBlockAlign 0 Short nChannels 2 Short nSamplesPerSec 44100 Integer wBitsPerSample 16 Short wFormatTag 85 Short wID 1 Short
Same as before, acmFormatSugges t() filled this in?
nBlockAlign is supposed to be 1 for WAVE_FORMAT_MPE GLAYER3
and nBlockSize is supposed to be the MP3 frame size, which
is always greater than 1 (313 for 44KHz/96Kbps/stereo).
nCodecDelay should be 1393 when using the system's FhG codec
(but it should work with 0 as well).
--
// Alessandro Angeli
// MVP :: Digital Media
// a dot angeli at psynet dot net
> #define MPEGLAYER3_WFX_ EXTRA_BYTES 12
OK, but the Delphi structure shows 10, and interrogating
the driver with ACM gives 14 <g>
On another site the extra bytes were commented with "Void as every
frame of an MPEG file has the information which would be contained in
the extra bytes" - is this true ? It is L3CodecP.acm and not I3CodecP.acm (L3 as in Layer3, that is MP3)
My file is I3CodecP.acm (I for India) and that is how I downloaded it.
I don't know if it _is_ Frauenhofer's although that is how it is
labelled with an ACM call. When I got it (some years ago associated
with an article) I emailed Frauenhofer because I suspected it _might_
be pirated. They did not even reply so I assumed that they did not
care.
Alan Lloyd
and it is also illegal to use without a license from FhG, which is impossible to get AFAIK. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: yuri |
last post by:
Hi all
At coding XP Themes i can't get "GetThemeColor" to work.
It always fails ("not found" err. code) regardless of which control parts
and states entered.
Could somebody help me with advice?
Yuri
|
by: Fett |
last post by:
Problem: My member variables in the child class are always null. I
don't know why this happens!
I have a base class for handling a user flow in my web, CWebUseCase,
the class is declared like: public class CWebUseCase {...};
This class is inherited into several specific flows like this one
CXmlFileList, which I will use to present a simple list to the user.
//CXmlFileList declaration:
|
by: Pete H |
last post by:
I would like to have my new C++ projects start out with two configurations, UnicodeDebug and UnicodeRelease, instead of the standard Debug and Release configurations that Visual Studio always creates. Is there a way to configure Visual Studio to do this
Thanks in advance
-
Pete H
|
by: ThunderMusic |
last post by:
Hi,
I'm trying to use the acm APIs in VB.NET. acmStreamOpen always returns
MMSYSERR_INVALFLAG. Here's how I use it :
declaration is :
Declare Auto Function acmStreamOpen Lib "MsAcm32.dll" (ByRef phas As IntPtr,
ByVal had As Long, ByRef pwfxSrc As MPEGLAYER3WAVEFORMAT, ByRef pm_wfxDst As
WAVEFORMATEX, ByRef pwfltr As Long, ByRef dwCallback As Long, ByRef
dwinstance As Long, ByVal fdwOpen As Int32) As Int32
|
by: snavebelac |
last post by:
Hi everyone
I have a system running on a 2 server environment. One server has the internal database (SQL SERVER 2000 with an MSAccess front end on the clients) and is not open to the internet. The other is just a web server, runs IIS6 and can communicate with SQL Server on the other box only - no direct access to files or anything else due to firewalls.
I needed a system, whereby files (images docs pdfs etc) could be made available to...
| |
by: itsolution |
last post by:
Hi folks,
Could you shed some light on this issue?
my program is running on Freebsd as a daemon. When user sends a
request, it forks itself and lets its child process handles the
request.
And its main role is just to read a big xml file and save each object
into its embedded DB(such as gdbm).
|
by: =?Utf-8?B?SmF5IE1pbGxlcg==?= |
last post by:
I'm having problems with the login control when I publish my site.
Everything works fine when I run the application from Visual Studio and when
I browse directly to the site where it is being developed. The problem comes
when I publish the site to another location on the same computer. The login
always fails. The site always works from the development location but not
from the published location. I've compared everything I can think of...
|
by: Rick Collard |
last post by:
Using DAO 3.6 on an Access 2002 database, I'm getting unexpected
results with the FindFirst method. Here's the simple code to test:
Public Sub FindIt()
Dim db As Database, rs As Recordset
Dim sCriteria As String
Set db = DBEngine.Workspaces(0).Databases(0)
Set rs = db.OpenRecordset("tblTest", dbOpenDynaset)
|
by: =?Utf-8?B?QXJtaW4gR2FsbGlrZXI=?= |
last post by:
Hi
I wrote a test for a workflow. Unfortunately my assertions in the
eventhandler which I set up during initialization, fail in every case...
What's the problem??
public void MyTestInitialize() {
workflowRuntime.WorkflowCompleted += delegate(object
|
by: Richie Kernagan |
last post by:
Howdy
Problem with the fread() call on MS Visual Studio 2005 running under Win 64.
The parameters to fread size and count are both size_t ie 64 bits. Even
so the call fails when the size arg is greater than 4GB (ie exceeds 32
bit unsigned value).
Any suggestions.
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
| |
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |