typelibraryconverterdlg.cpp

来自「这是VCF框架的代码」· C++ 代码 · 共 1,668 行 · 第 1/4 页

CPP
1,668
字号
	int coClassCount = pTypeLibHolder->m_coClasses.size();	for ( int i=0;i<coClassCount;i++) {		CoClassHolder* pCoClass = pTypeLibHolder->m_coClasses[i];		result += "#include \"" + pCoClass->m_className + ".h\"\n";	}	result += "\n\n";	result += "using namespace VCF;\n";	if ( TRUE == this->m_useTLBAsNamespace ) {		result += "using namespace " + pTypeLibHolder->m_typeLibName + ";\n";	}	result += "\n\n";		result += GenerateClassRegFunctionImpl( pTypeLibHolder );	return result;}void TypeLibraryConverterDlg::GenerateSingleFileForIFaceEnumsSeparateCoClasses( TypeLibHolder* pTypeLibHolder ){}void TypeLibraryConverterDlg::GenerateImplementation( TypeLibHolder* pTypeLibHolder ){	if ( m_cppDir.GetAt(m_cppDir.GetLength()-1) != '\\' ) {		m_cppDir += "\\";	}	if ( m_headerDir.GetAt(m_headerDir.GetLength()-1) != '\\' ) {		m_headerDir += "\\";	}	if ( TRUE == m_singleUnitPerClass ) {		GenerateSingleUnitperClassImpl( pTypeLibHolder );			}	else {				switch ( this->m_fileDistributionType ) {			case SINGLE_FILE_FOR_TLB : {				GenerateSingleFileForTLB( pTypeLibHolder );			}			break;			case SINGLE_FILE_FOR_IFACE_COCLASS : {				GenerateSingleFileForIFaceSeparateCoClasses( pTypeLibHolder );					}			break;			case SINGLE_FILE_FOR_IFACE_TYPEDEF_COCLASS : {				GenerateSingleFileForIFaceEnumsSeparateCoClasses( pTypeLibHolder );					}			break;		}	}}void TypeLibraryConverterDlg::LoadSettingsFromRegistry(){	HKEY currentUser = HKEY_CURRENT_USER;	HKEY settings;	CString regSettings;	regSettings.LoadString( IDS_REG_SETTINGS );		int err = RegOpenKeyEx( currentUser, regSettings, 0, KEY_ALL_ACCESS, &settings );	if ( err != ERROR_SUCCESS ) {		CreateRegistrySettings();	}	else {		DWORD type = 0;		BYTE* buf = NULL;		DWORD size = 0;				err = RegQueryValueEx( settings, "getMethodPrefix", 0, &type, NULL, &size );		if ( err == ERROR_SUCCESS ){			if ( (type == REG_SZ) && (size > 0) ){				buf = new BYTE[size];				memset( buf, 0, size );				err = RegQueryValueEx( settings, "getMethodPrefix", 0, &type, buf, &size );				if ( err == ERROR_SUCCESS ){					m_getMethodPrefix = (char*)buf;				}								delete [] buf;			}		}			err = RegQueryValueEx( settings, "setMethodPrefix", 0, &type, NULL, &size );		if ( err == ERROR_SUCCESS ){			if ( (type == REG_SZ) && (size > 0) ){				buf = new BYTE[size];				memset( buf, 0, size );				err = RegQueryValueEx( settings, "setMethodPrefix", 0, &type, buf, &size );				if ( err == ERROR_SUCCESS ){					m_setMethodPrefix = (char*)buf;				}								delete [] buf;			}		}		err = RegQueryValueEx( settings, "memberPrefix", 0, &type, NULL, &size );		if ( err == ERROR_SUCCESS ){			if ( (type == REG_SZ) && (size > 0) ){				buf = new BYTE[size];				memset( buf, 0, size );				err = RegQueryValueEx( settings, "memberPrefix", 0, &type, buf, &size );				if ( err == ERROR_SUCCESS ){					m_memberPrefix = (char*)buf;				}								delete [] buf;			}		}		err = RegQueryValueEx( settings, "classPrefix", 0, &type, NULL, &size );		if ( err == ERROR_SUCCESS ){			if ( (type == REG_SZ) && (size > 0) ){				buf = new BYTE[size];				memset( buf, 0, size );				err = RegQueryValueEx( settings, "classPrefix", 0, &type, buf, &size );				if ( err == ERROR_SUCCESS ){					m_classPrefix = (char*)buf;				}								delete [] buf;			}		}		err = RegQueryValueEx( settings, "baseClass", 0, &type, NULL, &size );		if ( err == ERROR_SUCCESS ){			if ( (type == REG_SZ) && (size > 0) ){				buf = new BYTE[size];				memset( buf, 0, size );				err = RegQueryValueEx( settings, "baseClass", 0, &type, buf, &size );				if ( err == ERROR_SUCCESS ){					m_baseClass = (char*)buf;				}								delete [] buf;			}		}				size = 4;		type = REG_DWORD;		DWORD boolVal = 0;		err = RegQueryValueEx( settings, "singleUnitPerClass", 0, &type, (BYTE*)&boolVal, &size );				m_singleUnitPerClass = boolVal;		size = 4;		type = REG_DWORD;		boolVal = 0;		err = RegQueryValueEx( settings, "useFunctionComments", 0, &type, (BYTE*)&boolVal, &size );				m_useFunctionComments = boolVal;		size = 4;		type = REG_DWORD;		boolVal = 0;		err = RegQueryValueEx( settings, "useCPPComments", 0, &type, (BYTE*)&boolVal, &size );				m_useCPPComments = boolVal;		size = 4;		type = REG_DWORD;		boolVal = 0;		err = RegQueryValueEx( settings, "useJavaDocParamComments", 0, &type, (BYTE*)&boolVal, &size );				m_useJavaDocParamComments = boolVal;				size = 4;		type = REG_DWORD;		DWORD dwVal = 0;		err = RegQueryValueEx( settings, "fileDistribution", 0, &type, (BYTE*)&dwVal, &size );				m_fileDistributionType = dwVal;	}	RegCloseKey( settings );}void TypeLibraryConverterDlg::CreateRegistrySettings(){	HKEY currentUser = HKEY_CURRENT_USER;	HKEY settings;	CString regSettings;	regSettings.LoadString( IDS_REG_SETTINGS );	DWORD disposition = 0;	int err = RegCreateKeyEx( currentUser, regSettings, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &settings, &disposition );	if ( err == ERROR_SUCCESS ) {		const unsigned char* val = (const unsigned char*)m_getMethodPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "getMethodPrefix", 0, REG_SZ, val, m_getMethodPrefix.GetLength() );		m_getMethodPrefix.ReleaseBuffer();		val = (const unsigned char*)m_setMethodPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "setMethodPrefix", 0, REG_SZ, val, m_setMethodPrefix.GetLength() );		m_setMethodPrefix.ReleaseBuffer();		val = (const unsigned char*)m_memberPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "memberPrefix", 0, REG_SZ, val, m_memberPrefix.GetLength() );		m_memberPrefix.ReleaseBuffer();		val = (const unsigned char*)m_classPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "classPrefix", 0, REG_SZ, val, m_classPrefix.GetLength() );		m_classPrefix.ReleaseBuffer();		val = (const unsigned char*)m_baseClass.GetBuffer(0);		err = RegSetValueEx( settings, "baseClass", 0, REG_SZ, val, m_baseClass.GetLength() );		m_baseClass.ReleaseBuffer();				DWORD boolval = (DWORD)m_singleUnitPerClass;		err = RegSetValueEx( settings, "singleUnitPerClass", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		DWORD dwVal = m_fileDistributionType;		err = RegSetValueEx( settings, "fileDistribution", 0, REG_DWORD, (BYTE*)&dwVal, sizeof(dwVal) );				boolval = (DWORD)m_useFunctionComments;		err = RegSetValueEx( settings, "useLowerCaseFuncNames", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		boolval = (DWORD)m_useCPPComments;		err = RegSetValueEx( settings, "useCPPComments", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		boolval = (DWORD)m_useLowerCaseFuncNames;		err = RegSetValueEx( settings, "useLowerCaseFuncNames", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );				boolval = (DWORD)m_useJavaDocParamComments;		err = RegSetValueEx( settings, "useJavaDocParamComments", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		RegCloseKey( settings );	}}void TypeLibraryConverterDlg::SaveSettingsToRegistry(){	HKEY currentUser = HKEY_CURRENT_USER;	HKEY settings;	CString regSettings;	regSettings.LoadString( IDS_REG_SETTINGS );	DWORD disposition = 0;	int err = RegOpenKeyEx( currentUser, regSettings, 0, KEY_ALL_ACCESS, &settings );	if ( err == ERROR_SUCCESS ) {		const unsigned char* val = (const unsigned char*)m_getMethodPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "getMethodPrefix", 0, REG_SZ, val, m_getMethodPrefix.GetLength() );		m_getMethodPrefix.ReleaseBuffer();		val = (const unsigned char*)m_setMethodPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "setMethodPrefix", 0, REG_SZ, val, m_setMethodPrefix.GetLength() );		m_setMethodPrefix.ReleaseBuffer();		val = (const unsigned char*)m_memberPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "memberPrefix", 0, REG_SZ, val, m_memberPrefix.GetLength() );		m_memberPrefix.ReleaseBuffer();		val = (const unsigned char*)m_classPrefix.GetBuffer(0);		err = RegSetValueEx( settings, "classPrefix", 0, REG_SZ, val, m_classPrefix.GetLength() );		m_classPrefix.ReleaseBuffer();		val = (const unsigned char*)m_baseClass.GetBuffer(0);		err = RegSetValueEx( settings, "baseClass", 0, REG_SZ, val, m_baseClass.GetLength() );		m_baseClass.ReleaseBuffer();		DWORD boolval = (DWORD)m_singleUnitPerClass;		err = RegSetValueEx( settings, "singleUnitPerClass", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		boolval = (DWORD)m_useFunctionComments;		err = RegSetValueEx( settings, "useLowerCaseFuncNames", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		boolval = (DWORD)m_useCPPComments;		err = RegSetValueEx( settings, "useCPPComments", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		boolval = (DWORD)m_useLowerCaseFuncNames;		err = RegSetValueEx( settings, "useLowerCaseFuncNames", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		boolval = (DWORD)m_useJavaDocParamComments;		err = RegSetValueEx( settings, "useJavaDocParamComments", 0, REG_DWORD, (BYTE*)&boolval, sizeof(boolval) );		DWORD dwVal = m_fileDistributionType;		err = RegSetValueEx( settings, "fileDistribution", 0, REG_DWORD, (BYTE*)&dwVal, sizeof(dwVal) );				RegCloseKey( settings );	}	else {		CreateRegistrySettings();	}}void TypeLibraryConverterDlg::InitializeProgress( TypeLibHolder* pTypeLibHolder ){	m_progressLabel.SetWindowText( "" );		m_conversionProgress.SetPos( 0 );	int max = pTypeLibHolder->m_coClasses.size();		int count = max;	for (int i=0;i<count;i++) {		CoClassHolder* coClass = pTypeLibHolder->m_coClasses[i];		max += coClass->m_implementedInterfaces.size();		int ic = coClass->m_implementedInterfaces.size();		for ( int j=0;j<ic;j++) {			max += coClass->m_implementedInterfaces[j]->m_methods.size();		}	}	max += pTypeLibHolder->m_interfaces.size();	std::map<_bstr_t,InterfaceHolder*>::iterator it = pTypeLibHolder->m_interfaces.begin();	while ( it != pTypeLibHolder->m_interfaces.end() ) {		max += (it->second)->m_methods.size();		it ++;	}					m_conversionProgress.SetRange( 0, max );	m_conversionProgress.SetStep( 1 );	m_progressLabel.ShowWindow( SW_SHOW );	m_conversionProgress.ShowWindow( SW_SHOW );}void TypeLibraryConverterDlg::FinishProgress(){	m_progressLabel.ShowWindow( SW_HIDE );	m_conversionProgress.ShowWindow( SW_HIDE );}void TypeLibraryConverterDlg::UpdateProgress( CString message ){	m_progressLabel.SetWindowText( message );		m_conversionProgress.StepIt();	m_progressLabel.Invalidate();	m_conversionProgress.Invalidate();}CString TypeLibraryConverterDlg::GenerateClassRegFunction( TypeLibHolder* pTypeLibHolder ){	CString result = "";	result += "void register"+ pTypeLibHolder->m_typeLibName + "Classes();\n";	return result;}	CString TypeLibraryConverterDlg::GenerateClassRegFunctionImpl( TypeLibHolder* pTypeLibHolder ){	CString result = "";	result += "void register"+ pTypeLibHolder->m_typeLibName + "Classes()\n";	result += "{\n";	int coClassCount = pTypeLibHolder->m_coClasses.size();	for (int i=0;i<coClassCount;i++) {		CoClassHolder* coClass = pTypeLibHolder->m_coClasses[i];		result += "\tREGISTER_CLASSINFO( " + coClass->m_className + " );\n";	}	result += "}\n\n";	return result;}void TypeLibraryConverterDlg::OnBrowseForHdrDir() {		BROWSEINFO info = {0};	TCHAR displayName[MAX_PATH];	memset(displayName,0,MAX_PATH);	CString title = "Browse for Header(*.h) Directory";			info.hwndOwner = ::GetActiveWindow();	info.pidlRoot = NULL;	info.pszDisplayName = displayName;	info.lpszTitle = title.GetBuffer(0);	info.ulFlags = 0; 	LPITEMIDLIST itemIDList = SHBrowseForFolder( &info );	if ( NULL != itemIDList ){		TCHAR path[MAX_PATH];		memset(path,0,MAX_PATH);		if ( TRUE == SHGetPathFromIDList( itemIDList, path ) ){			this->m_headerDir = path;			if ( m_headerDir.GetAt(m_headerDir.GetLength()-1) != '\\' ) {				m_headerDir += "\\";			}			UpdateData( FALSE );		}	}	title.ReleaseBuffer();}void TypeLibraryConverterDlg::OnBrowseForCppDir() {	BROWSEINFO info = {0};	TCHAR displayName[MAX_PATH];	memset(displayName,0,MAX_PATH);	CString title = "Browse for CPP(*.cpp) Directory";			info.hwndOwner = ::GetActiveWindow();	info.pidlRoot = NULL;	info.pszDisplayName = displayName;	info.lpszTitle = title.GetBuffer(0);	info.ulFlags = 0; 	LPITEMIDLIST itemIDList = SHBrowseForFolder( &info );	if ( NULL != itemIDList ){		TCHAR path[MAX_PATH];		memset(path,0,MAX_PATH);		if ( TRUE == SHGetPathFromIDList( itemIDList, path ) ){			this->m_cppDir = path;			if ( m_cppDir.GetAt(m_cppDir.GetLength()-1) != '\\' ) {				m_cppDir += "\\";			}			UpdateData( FALSE );		}	}	title.ReleaseBuffer();}void TypeLibraryConverterDlg::OnAddToProject() {	this->m_addToProject = !m_addToProject;	UpdateData();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?