Exemple #1
0
//
// Register the component in the registry.
//
HRESULT RegisterServer(const CLSID& clsid,         // Class ID
                       const char *szFileName,     // DLL module handle
                       const char* szProgID,       //   IDs
                       const char* szDescription,  // Description String
					   const char* szVerIndProgID) // optional

{
	// Convert the CLSID into a char.
	char szCLSID[CLSID_STRING_SIZE] ;
	CLSIDtoString(clsid, szCLSID, sizeof(szCLSID)) ;

	// Build the key CLSID\\{...}
	char szKey[64] ;
	strcpy(szKey, "CLSID\\") ;
	strcat(szKey, szCLSID) ;
  
	// Add the CLSID to the registry.
	SetKeyAndValue(szKey, NULL, szDescription) ;

	// Add the server filename subkey under the CLSID key.
	SetKeyAndValue(szKey, "InprocServer32", szFileName) ;

	// Add the ProgID subkey under the CLSID key.
	if (szProgID != NULL) {
		SetKeyAndValue(szKey, "ProgID", szProgID) ;
		SetKeyAndValue(szProgID, "CLSID", szCLSID) ;
	}

	if (szVerIndProgID) {
		// Add the version-independent ProgID subkey under CLSID key.
		SetKeyAndValue(szKey, "VersionIndependentProgID",
					   szVerIndProgID) ;

		// Add the version-independent ProgID subkey under HKEY_CLASSES_ROOT.
		SetKeyAndValue(szVerIndProgID, NULL, szDescription) ; 
		SetKeyAndValue(szVerIndProgID, "CLSID", szCLSID) ;
		SetKeyAndValue(szVerIndProgID, "CurVer", szProgID) ;

		// Add the versioned ProgID subkey under HKEY_CLASSES_ROOT.
		SetKeyAndValue(szProgID, NULL, szDescription) ; 
		SetKeyAndValue(szProgID, "CLSID", szCLSID) ;
	}

	return S_OK ;
}
Exemple #2
0
/* static private */
HRESULT REGUTIL::_RegisterClassBase( REFCLSID rclsid,
								     const char *szDesc,					
									 const char *szProgID,				
									 const char *szIndepProgID,			
									 char *szOutCLSID )				
{
	char szID[64]; 	   // the class ID to register.
	OLECHAR	szWID[64]; // helper for the class ID to register.


    StringFromGUID2( rclsid, szWID, NumItems( szWID ) );
	WideCharToMultiByte( CP_ACP, 
						 0, 
						 szWID, 
						 -1, 
						 szID, 
						 sizeof( szID ), 
						 NULL, 
						 NULL );

    strcpy( szOutCLSID, "CLSID\\" );
    strcat( szOutCLSID, szID );

    // create ProgID keys.
    SetKeyAndValue( szProgID, NULL, szDesc );
    SetKeyAndValue( szProgID, "CLSID", szID );

    // create VersionIndependentProgID keys.
    SetKeyAndValue( szIndepProgID, NULL, szDesc );
    SetKeyAndValue( szIndepProgID, "CurVer", szProgID );
    SetKeyAndValue( szIndepProgID, "CLSID", szID );

    // create entries under CLSID.
    SetKeyAndValue( szOutCLSID, NULL, szDesc );
    SetKeyAndValue( szOutCLSID, "ProgID", szProgID );
    SetKeyAndValue( szOutCLSID, "VersionIndependentProgID", szIndepProgID );
    SetKeyAndValue( szOutCLSID, "NotInsertable", NULL );
	
	
	return S_OK;

} // REGUTIL::_RegisterClassBase
Exemple #3
0
/* static public */
HRESULT REGUTIL::RegisterCOMClass( REFCLSID	rclsid,
								   const char *szDesc,					
								   const char *szProgIDPrefix,	
								   int	iVersion,				
								   const char *szClassProgID,	
								   const char *szThreadingModel,
								   const char *szModule ) 
{
	HRESULT	hr;
	char rcCLSID[MAX_LENGTH];			// CLSID\\szID.
	char rcProgID[MAX_LENGTH];			// szProgIDPrefix.szClassProgID
	char rcIndProgID[MAX_LENGTH];		// rcProgID.iVersion
	char rcInproc[MAX_LENGTH + 2]; 		// CLSID\\InprocServer32


	// format the prog ID values.
	sprintf( rcIndProgID, "%s.%s", szProgIDPrefix, szClassProgID ) ;
	sprintf( rcProgID, "%s.%d", rcIndProgID, iVersion );

	// do the initial portion.
	hr =  REGUTIL::_RegisterClassBase( rclsid, 
									   szDesc, 
						     		   rcProgID, 
							 	       rcIndProgID, 
							 	       rcCLSID );
	if ( SUCCEEDED( hr ) )
	{
		// set the server path.
	    SetKeyAndValue( rcCLSID, "InprocServer32", szModule );

		// add the threading model information.
		sprintf( rcInproc, "%s\\%s", rcCLSID, "InprocServer32" );
		SetRegValue( rcInproc, "ThreadingModel", szThreadingModel );
	}	
	

	return hr;

} // REGUTIL::RegisterCOMClass
Exemple #4
0
// returns 0 or winerror.h error code
int reg(BOOL set, LPSTR keys)
{
    WCHAR szwork[128];
    char szID[128];
    char szCLSID[128];
    char szLIBID[128];
	char iid[128];
    char szLIBTYPELIBID[128];
	char szdir[512];
	char path[256];
	char inter[256];
	char typetext[256];
	char progidcurtext[256];
	char progidtext[256];
	LPSTR p;
	char progidcur[100];
	char module[_MAX_PATH];
	int r;

    GetModuleFileNameA(g_hinst, module, sizeof(module));

#ifdef _JDLL
	char progid[100] = "JDLLServer";
	char producttext[] = "J DLL Server ";
#else
	char progid[100] = "JEXEServer";
	char producttext[] = "J EXE Server ";
#endif

	setguids();
	strcat(progid, jclass);
	strcpy(progidcur, progid);
	strcat(progidcur, ".");
	strcat(progidcur, jversion);

	StringFromGUID2(jclsid, szwork, 128);
	toasc(szwork, szID);
    strcpy(szCLSID, "CLSID\\");
    strcat(szCLSID, szID);

    StringFromGUID2(jlibid, szwork, 128);
	toasc(szwork, szLIBID);
    strcpy(szLIBTYPELIBID, "TypeLib\\");
    strcat(szLIBTYPELIBID, szLIBID);

    StringFromGUID2(jiid, szwork, 128);
	toasc(szwork, iid);
	strcpy(inter, "Interface\\");
	strcat(inter, iid);

	strcpy(szdir, module);
	p=strrchr(szdir, '\\');
	*p=0;
	keys[0]=0;

	strcpy(progidtext, "Jsoftware : ");
	strcat(progidtext, producttext);
	strcat(progidtext, jclass);

	strcpy(progidcurtext, progidtext);
	strcat(progidcurtext, " (version ");
	strcat(progidcurtext, jversion);
	strcat(progidcurtext, ")");

//HKEY_CLASSES_ROOT\JServer.Object = J Server
    r=SetKeyAndValue(set, keys, progid, 0, progidtext);
	if(r) return r;

//HKEY_CLASSES_ROOT\JServer.Object\CLSID = {21EB05E0-1AB3-11cf-A2AC-8FF70874C460}
    setpath(progid,"\\CLSID");
	r=SetKeyAndValue(set, keys, path, 0, szID);
	if(r) return r;

//HKEY_CLASSES_ROOT\JServer.Object\CurVer = JServer.Object.1
	setpath(progid,"\\CurVer");
	r=SetKeyAndValue(set, keys, path, 0, progidcur);		
	if(r) return r;

//HKEY_CLASSES_ROOT\JServer.Object\NotInsertable
	setpath(progid,"\\NotInsertable");
	r=SetKeyAndValue(set, keys, path, 0, 0);
	if(r) return r;


//HKEY_CLASSES_ROOT\JServer.Object.1 = J Server (Ver 1.0)
	r=SetKeyAndValue(set, keys, progidcur, 0, progidcurtext);
	if(r) return r;

//HKEY_CLASSES_ROOT\JServer.Object.1\CLSID = {21EB05E0-1AB3-11cf-A2AC-8FF70874C460}
	setpath(progidcur,"\\CLSID");
	r=SetKeyAndValue(set, keys, path, 0, szID);
	if(r) return r;

//HKEY_CLASSES_ROOT\JServer.Object.1\NotInsertable
	setpath(progidcur, "\\NotInsertable");
	r=SetKeyAndValue(set, keys, path, 0, 0);
	if(r) return r;

//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460} = J Server (Ver 1.0)
	r=SetKeyAndValue(set, keys, szCLSID, 0, progidcurtext);
	if(r) return r;

#ifdef _JDLL
//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\InprocServer32 = d:\dev\jcom\jcom\windebug\jserver.dll
	r=SetKeyAndValue(set, keys, szCLSID, "InprocServer32", module);
	if(r) return r;

	r=SetKeyAndNamedValue(set, keys, szCLSID, "InprocServer32", "Apartment", "ThreadingModel");
	if(r) return r;
#else
//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\LocalServer32 = d:\dev\jcom\jcom\windebug\jserver.dll
	r=SetKeyAndValue(set, keys, szCLSID, "LocalServer32", module);
	if(r) return r;

//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\LocalHandler32 = ole32.dll
	r=SetKeyAndValue(set, keys, szCLSID, "LocalHandler32", "ole32.dll");
	if(r) return r;
#endif

//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\ProgID = JServer.Object.1
	r=SetKeyAndValue(set, keys, szCLSID, "ProgID", progidcur);
	if(r) return r;

//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\VersionIndependentProgID = JServer.Object
	r=SetKeyAndValue(set, keys, szCLSID, "VersionIndependentProgID", progid);
	if(r) return r;

//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\TypeLib = {21EB05E1-1AB3-11cf-A2AC-8FF70874C460}
	r=SetKeyAndValue(set, keys, szCLSID, "TypeLib", szLIBID);
	if(r) return r;

//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\Programmable
	r=SetKeyAndValue(set, keys, szCLSID, "Programmable", 0);
	if(r) return r;

//HKEY_CLASSES_ROOT\CLSID\{21EB05E0-1AB3-11cf-A2AC-8FF70874C460}\NotInsertable
	r=SetKeyAndValue(set, keys, szCLSID, "NotInsertable", 0);
	if(r) return r;

//HKEY_CLASSES_ROOT\TypeLib\{21EB05E1-1AB3-11cf-A2AC-8FF70874C460} = J Server Type Library
	strcpy(typetext, producttext);
	strcat(typetext, jclass);
	strcat(typetext, " Type Library");
	r=SetKeyAndValue(set, keys, szLIBTYPELIBID, 0, typetext);
	if(r) return r;

//HKEY_CLASSES_ROOT\TypeLib\{21EB05E1-1AB3-11cf-A2AC-8FF70874C460}\DIR = d:\dev\jcom
	r=SetKeyAndValue(set, keys, szLIBTYPELIBID, "DIR", szdir);
	if(r) return r;

//HKEY_CLASSES_ROOT\TypeLib\{21EB05E1-1AB3-11cf-A2AC-8FF70874C460}\HELPDIR = d:\dev\jcom\jcomhelp
	r=SetKeyAndValue(set, keys, szLIBTYPELIBID, "HELPDIR", szdir);
	if(r) return r;

//HKEY_CLASSES_ROOT\TypeLib\{21EB05E1-1AB3-11cf-A2AC-8FF70874C460}\1.0 = J Server (Ver 1.0) Type Library
	setpath(jversion, ".0");
	strcpy(typetext, producttext);
	strcat(typetext, jclass);
	strcat(typetext, " (version ");
	strcat(typetext, jversion);
	strcat(typetext, ") Type Library");
	r=SetKeyAndValue(set, keys, szLIBTYPELIBID, path, typetext);
	if(r) return r;

// note: key explicity added so we will be able to delete it
//HKEY_CLASSES_ROOT\TypeLib\{21EB05E1-1AB3-11cf-A2AC-8FF70874C460}\1.0\0
	setpath(jversion, ".0\\0");
	r=SetKeyAndValue(set, keys, szLIBTYPELIBID, path, module);
	if(r) return r;

//HKEY_CLASSES_ROOT\TypeLib\{21EB05E1-1AB3-11cf-A2AC-8FF70874C460}\1.0\0\win32 = d:\dev\jcom\jserver.tlb
	setpath(jversion, ".0\\0\\win32");
	r=SetKeyAndValue(set, keys, szLIBTYPELIBID, path, module);
	if(r) return r;

// interface must be registered for VB <set js as New IJEXEServer>

//HKEY_CLASSES_ROOT\Interface\{21EB05E2-1AB3-11cf-A2AC-8FF70874C460} = IJEXEServer
#ifdef _JDLL
	setpath("IJDLLServer", jclass);
#else	
	setpath("IJEXEServer", jclass);
#endif
	r=SetKeyAndValue(set, keys, inter, 0, path);
	if(r) return r;

//HKEY_CLASSES_ROOT\Interface\{21EB05E2-1AB3-11cf-A2AC-8FF70874C460}\ProxyStubClsid = {00020424-0000-0000-C000-000000000046}
	r=SetKeyAndValue(set, keys, inter, "ProxyStubClsid", INTERCLSID);
	if(r) return r;

//HKEY_CLASSES_ROOT\Interface\{21EB05E2-1AB3-11cf-A2AC-8FF70874C460}\ProxyStubClsid32 = {00020424-0000-0000-C000-000000000046}
	r=SetKeyAndValue(set, keys, inter, "ProxyStubClsid32", INTERCLSID);
	if(r) return r;

//HKEY_CLASSES_ROOT\Interface\{21EB05E2-1AB3-11cf-A2AC-8FF70874C460}\TypeLib = {21EB05E1-1AB3-11cf-A2AC-8FF70874C460}
	r=SetKeyAndValue(set, keys, inter, "TypeLib", szLIBID);
	if(r) return r;
	return 0;
}