|
MethCli
The MethCli sample
demonstrates the framework necessary to call a method provider. This code calls the "Echo" method
as supported by that provider. That method
is attached to the MethProvSamp class which takes a string as input, returns a
copy and the length. The class is
defined in the MethProv.MOF file which is in the MethProv sample. As written, the sample passes in the string
“hello” to the method provider but the sample can be easily adapted to accept
user-specified strings.
NOTE: The
MethProv method provider sample must be built and registered before executing
the MethCli sample.
Building the MethCli Application
The application can be
built from the command line using NMAKE, or it can be built using Microsoft
Visual C++.
From the command line
in the sample installation directory, type the following:
NMAKE /f "Makefile"
From Microsoft Visual
C++:
1.
Select File + Open Workspace
2.
Select the MethCli.dsp file
Using the MethCli Sample
1. Build and register the MethProv sample
provider. See the MethProv sample
documentation for details.
2. Build the MethCli sample using NMAKE as described
above
3. Execute the MethCli application and the appropriate
method results will be printed to the console window. From the command line in the sample installation directory, type
the following:
MethCli.exe
General Notes
Things
to remember when you're building your own WMI client application:
1.
If you want your client to
run on NT and non-DCOM versions of Windows 95, manually load the ole32.dll and
see if CoInitializeSecurity() exists. This routine won’t exist on Windows 95
installations that don’t have DCOM installed separately. If this routine doesn't
exist, the asynchronous routines in this sample won’t work because of
mismatched security level problems. The synchronous techniques will still work.
2.
If you don’t care about
non-DCOM versions of Windows 95, you can define _WIN32_DCOM so that CoInitializeSecurity() is available for
implicit linking. Don't use _WIN32_WINNT to get this prototype since it won't
compile under the Windows 95/98 operating systems.
3.
In any case, the
CoInitializeSecurity() call (in InitInstance()) is required to work around a
security problem when WMI trying to call a Sink object but won't identify
itself. The CoInitializeSecurity() call turns off the authentication
requirement.
4.
WMI interfaces are defined
in wbemcli.h and wbemprov.h found in the wmi\include directory. You may #include both these files by
including just wbemidl.h located in the same directory.
5.
WMI interface CLSIDs are
defined in wbemuuid.lib. If you get unresolved externals in interfaces and
CLSIDs, this is what is missing.
6.
You'll need to link with
oleaut32.lib and ole32.lib to get the needed COM support.
7.
In the Link|Output
settings, specify 'wWinMainCRTStartup' as the entry point. This is per the
Unicode programming instructions.
8.
If you're using the makefiles, don't forget to set the Visual C++
environment variables. This is done by running VCVARS32.BAT.