Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Create objects from CLSID?

Status
Not open for further replies.

knovak

Programmer
Dec 18, 2001
17
US
I'm writing a utility for our work and one of the reqs. of this utility is to be able to create an object from knowing just the CLSID of the object. For example, when I run the following code in a function, I receive "Can create ActiveX component"

Dim oObj As Object
Set oObj = CreateObject("665E137E-C95D-4960-90AD-05179538A68F")
Set oObj = Nothing


Does anyone know of a way to create objects in VB6 by using only the CLSID of the object?

Thanks,

Kyle
 
without knowing the ProgID, then how are u adding the reference of this object in VB program??
 
As long as the object is being created latebound, there is no need to add a reference to a VB program, however CreateObject does expect the progid and not the CLSID. If you only know the CLSID, you can get the ProgID using the following API . . .


ProgIDFromCLSID
Retrieves the ProgID for a given CLSID.

WINOLEAPI ProgIDFromCLSID(

REFCLSID clsid,

LPOLESTR * lplpszProgID

);

Parameters
clsid
[in] Specifies the CLSID for which the ProgID is requested.

lplpszProgID

[out] Address of LPOLESTR pointer variable that receives a pointer to the ProgID string.

Return Values
S_OK
The ProgID was returned successfully.

REGDB_E_CLASSNOTREG

Class not registered in the registry.

REGDB_E_READREGDB

Error reading registry.

Remarks
Every OLE object class listed in the Insert Object dialog box must have a programmatic identifier (ProgID), a string that uniquely identifies a given class, stored in the registry. In addition to determining the eligibility for the Insert Object dialog box, the ProgID can be used as an identifier in a macro programming language to identify a class. Finally, the ProgID is also the class name used for an object of an OLE class that is placed in an OLE 1 container.
The ProgIDFromCLSID function uses entries in the registry to do the conversion. OLE application authors are responsible for ensuring that the registry is configured correctly in the application's setup program.

The ProgID string must be different than the class name of any OLE 1 application, including the OLE 1 version of the same application, if there is one. In addition, a ProgID string must not contain more than 39 characters, start with a digit, or, except for a single period, contain any punctuation (including underscores).

The ProgID must never be shown to the user in the user interface. If you need a short displayable string for an object, call IOleObject::GetUserType.

Call the CLSIDFromProgID function to find the CLSID associated with a given ProgID. CLSIDs can be freed with the task allocator (refer to the CoGetMalloc function).
- Jeff Marler B-)
 
well jmarler, what about those libraries that r not COM compliant ie old fashioned dll files, those have no registry entries. what if someone wants to know the function declarations (function names, arguments n their datatypes) in those libraries.

can u help solve this problem. i'm thankful

ComputerJin
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top