typelibraryconverterdlg.cpp
来自「这是VCF框架的代码」· C++ 代码 · 共 1,668 行 · 第 1/4 页
CPP
1,668 行
header += "#define "; header += s; header += "\n\n"; header += "#include \"FoundationKit.h\"\n\n"; header += "\n\nusing namespace VCF;\n\n"; if ( TRUE == this->m_useTLBAsNamespace ) { header += "namespace "; header += pTypeLibHolder->m_typeLibName; header += " {\n\n"; } std::map<_bstr_t,InterfaceHolder*>::iterator it = pTypeLibHolder->m_interfaces.begin(); while ( it != pTypeLibHolder->m_interfaces.end() ) { InterfaceHolder* pInterface = it->second; header += GenerateInterface( pInterface, pTypeLibHolder ); it++; } if ( TRUE == this->m_useTLBAsNamespace ) { header += "} //end of namespace "; header += pTypeLibHolder->m_typeLibName; header += "\n\n"; } header += "#endif //"; header += s; header += "\n\n"; headerFileName = m_headerDir; headerFileName += pTypeLibHolder->m_typeLibName; headerFileName += "Interfaces.h"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( header.GetBuffer(0) ); header.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); //do coClasses int coClassCount = pTypeLibHolder->m_coClasses.size(); for ( int i=0;i<coClassCount;i++) { CoClassHolder* pCoClass = pTypeLibHolder->m_coClasses[i]; header = GenerateCoClassHeader( pCoClass, pTypeLibHolder ); headerFileName = m_headerDir; headerFileName += pCoClass->m_className; headerFileName += ".h"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( header.GetBuffer(0) ); header.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); CString coClassImpl = GenerateCoClassImpl( pCoClass, pTypeLibHolder ); headerFileName = m_cppDir; headerFileName += pCoClass->m_className; headerFileName += ".cpp"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( coClassImpl.GetBuffer(0) ); coClassImpl.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); } CString tlbImpl = GenerateTLBImpl( pTypeLibHolder ); headerFileName = m_cppDir; headerFileName += pTypeLibHolder->m_typeLibName; headerFileName += ".cpp"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( tlbImpl.GetBuffer(0) ); tlbImpl.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName );}void TypeLibraryConverterDlg::GenerateSingleFileForTLB( TypeLibHolder* pTypeLibHolder ){ CString header; header += "//"; header += pTypeLibHolder->m_typeLibName.copy(); header += ".h\n\n"; header += "#ifndef "; CString s = (char*)pTypeLibHolder->m_typeLibName; s.MakeUpper(); s = "_" + s + "_H__"; header += s.GetBuffer(0); s.ReleaseBuffer(); header += "\n"; header += "#define "; header += s.GetBuffer(0); s.ReleaseBuffer(); header += "\n\n"; header += "#include \"FoundationKit.h\"\n\n"; header += "\n\nusing namespace VCF;\n\n"; if ( TRUE == this->m_useTLBAsNamespace ) { header += "namespace "; header += pTypeLibHolder->m_typeLibName; header += " {\n\n"; } header += GenerateClassRegFunction( pTypeLibHolder ); header += "//Typelibrary typedefs\n\n"; header += pTypeLibHolder->m_typeDefs; header += "\n//End of Typelibrary typedefs\n\n"; UpdateProgress( "Type Defs completed..." ); std::map<_bstr_t,InterfaceHolder*>::iterator it = pTypeLibHolder->m_interfaces.begin(); while ( it != pTypeLibHolder->m_interfaces.end() ) { InterfaceHolder* pInterface = it->second; CString uuid = (TCHAR*)pInterface->m_interfaceID; uuid.Delete(0,1); uuid.Delete(uuid.GetLength()-1,1); if ( this->m_useCPPComments ) { header += "//Interface " + pInterface->m_interfaceName + "\n"; header += "//UUID: " + uuid + "\n"; } else { header += "/**\n"; header += "*Interface " + pInterface->m_interfaceName + "\n"; header += "*UUID: " + uuid + "\n"; header += "*/\n"; } header += "class " + pInterface->m_interfaceName + " : public VCF::Interface { \n"; header += "public:\n"; header += "\tvirtual ~" + pInterface->m_interfaceName + "(){};\n\n"; CString s; s += "Adding Interface " + pInterface->m_interfaceName + "..."; UpdateProgress( s ); int methodCount = pInterface->m_methods.size(); for (int i=0;i<methodCount;i++) { MethodHolder* pMethod = pInterface->m_methods[i]; s = ""; s.Format( "Adding method %d of %d for interface %s", i, methodCount, (char*)pInterface->m_interfaceName ); UpdateProgress( s ); header += this->GenerateMethodComments( pMethod, 1 ); header += "\tvirtual " + pMethod->m_returnType + " "; if ( pMethod->m_isPropertyGetter ) { header += this->m_getMethodPrefix; } else if ( pMethod->m_isPropertySetter ) { header += this->m_setMethodPrefix; } header += pMethod->m_declaration + " = 0;"; CString siName = (TCHAR*)pInterface->m_superInterfaceName; if ( siName == "IDispatch" ) { header += "//[id(" + pMethod->m_methodID + ")]"; } header += "\n\n"; } header += "};\n\n\n"; it++; } int coClassCount = pTypeLibHolder->m_coClasses.size(); for ( int i=0;i<coClassCount;i++) { CoClassHolder* pCoClass = pTypeLibHolder->m_coClasses[i]; CString uuid = (TCHAR*)pCoClass->m_classID; uuid.Delete(0,1); uuid.Delete(uuid.GetLength()-1,1); CString coClassName = (TCHAR*)pTypeLibHolder->m_typeLibName; coClassName += "_" + pCoClass->m_className; coClassName.MakeUpper(); coClassName += "_CLASSID"; header += "#define " + coClassName + " \t\t\""; header += uuid + "\"\n"; if ( this->m_useCPPComments ) { header += "//class " + pCoClass->m_className + "\n"; header += "//UUID: " + uuid + "\n"; header += "//ProgID: " + pCoClass->m_progID + "\n"; } else { header += "/**\n"; header += "*class " + pCoClass->m_className + "\n"; header += "*UUID: " + uuid + "\n"; header += "*ProgID: " + pCoClass->m_progID + "\n"; header += "*/\n"; } header += "class " + pCoClass->m_className + " : public VCF::Object"; CString s; s += "Adding CoClass " + pCoClass->m_className + "..."; UpdateProgress( s ); int interfaceCount = pCoClass->m_implementedInterfaces.size(); if ( interfaceCount > 0 ) { header += ", "; } for ( int j=0;j<interfaceCount;j++) { InterfaceHolder* pImplInterface = pCoClass->m_implementedInterfaces[j]; header += "public " + pImplInterface->m_interfaceName; s = ""; s += "CoClass " + pCoClass->m_className + " implements " + pImplInterface->m_interfaceName; UpdateProgress( s ); if ( j < (interfaceCount-1) ) { header += ", "; } } header += " {\n"; header += "public:\n"; header += "\tBEGIN_CLASSINFO( " + pCoClass->m_className + ", \""; if ( TRUE == this->m_useTLBAsNamespace ) { header += pTypeLibHolder->m_typeLibName + "::"; } header += pCoClass->m_className + "\", \"VCF::Object\", "; header += coClassName + " );\n"; header += "\tEND_CLASSINFO( " + pCoClass->m_className + " );\n\n"; header += "\t" + pCoClass->m_className + "();\n\n"; header += "\tvirtual ~" + pCoClass->m_className + "();\n\n"; for ( j=0;j<interfaceCount;j++) { InterfaceHolder* pImplInterface = pCoClass->m_implementedInterfaces[j]; int methodCount = pImplInterface->m_methods.size(); for (int m=0;m<methodCount;m++) { s = ""; s.Format( "Adding method %d of %d for interface %s", m, methodCount, (char*)pImplInterface->m_interfaceName ); UpdateProgress( s ); MethodHolder* pMethod = pImplInterface->m_methods[m]; header += this->GenerateMethodComments( pMethod, 1 ); header += "\tvirtual " + pMethod->m_returnType + " "; if ( pMethod->m_isPropertyGetter ) { header += this->m_getMethodPrefix; } else if ( pMethod->m_isPropertySetter ) { header += this->m_setMethodPrefix; } header += pMethod->m_declaration + ";"; CString siName = (TCHAR*)pImplInterface->m_superInterfaceName; if ( siName == "IDispatch" ) { header += "//[id(" + pMethod->m_methodID + ")]"; } header += "\n\n"; } } header += "};\n\n"; } if ( TRUE == this->m_useTLBAsNamespace ) { header += "} //end of namespace "; header += pTypeLibHolder->m_typeLibName; header += "\n\n"; } header += "#endif //"; header += s.GetBuffer(0); s.ReleaseBuffer(); header += "\n\n"; CString headerFileName = "foo"; headerFileName = m_headerDir; headerFileName += pTypeLibHolder->m_typeLibName; headerFileName += ".h"; CStdioFile headerFile( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( header.GetBuffer(0) ); header.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); CString tlbImpl = GenerateTLBImpl( pTypeLibHolder ); headerFileName = m_cppDir; headerFileName += pTypeLibHolder->m_typeLibName; headerFileName += ".cpp"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( tlbImpl.GetBuffer(0) ); tlbImpl.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName );}void TypeLibraryConverterDlg::GenerateSingleFileForIFaceSeparateCoClasses( TypeLibHolder* pTypeLibHolder ){ CString header; header += "//"; header += pTypeLibHolder->m_typeLibName.copy(); header += "Interfaces.h"; header += ".h\n\n"; header += "#ifndef "; CString s = (char*)pTypeLibHolder->m_typeLibName; s += "_Interfaces"; s.MakeUpper(); s = "_" + s + "_H__"; header += s.GetBuffer(0); s.ReleaseBuffer(); header += "\n"; header += "#define "; header += s.GetBuffer(0); s.ReleaseBuffer(); header += "\n\n"; header += "#include \"FoundationKit.h\"\n\n"; header += "\n\nusing namespace VCF;\n\n"; if ( TRUE == this->m_useTLBAsNamespace ) { header += "namespace "; header += pTypeLibHolder->m_typeLibName; header += " {\n\n"; } header += GenerateClassRegFunction( pTypeLibHolder ); header += "//Typelibrary typedefs\n\n"; header += pTypeLibHolder->m_typeDefs; header += "\n//End of Typelibrary typedefs\n\n"; std::map<_bstr_t,InterfaceHolder*>::iterator it = pTypeLibHolder->m_interfaces.begin(); while ( it != pTypeLibHolder->m_interfaces.end() ) { InterfaceHolder* pInterface = it->second; header += GenerateInterface( pInterface, pTypeLibHolder ); it++; } if ( TRUE == this->m_useTLBAsNamespace ) { header += "} //end of namespace "; header += pTypeLibHolder->m_typeLibName; header += "\n\n"; } header += "#endif //"; header += s; header += "\n\n"; CString headerFileName = m_headerDir; headerFileName += pTypeLibHolder->m_typeLibName; headerFileName += "Interfaces.h"; CStdioFile headerFile; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( header.GetBuffer(0) ); header.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); //do coClasses int coClassCount = pTypeLibHolder->m_coClasses.size(); for ( int i=0;i<coClassCount;i++) { CoClassHolder* pCoClass = pTypeLibHolder->m_coClasses[i]; header = GenerateCoClassHeader( pCoClass, pTypeLibHolder ); headerFileName = m_headerDir; headerFileName += pCoClass->m_className; headerFileName += ".h"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( header.GetBuffer(0) ); header.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); CString coClassImpl = GenerateCoClassImpl( pCoClass, pTypeLibHolder ); headerFileName = m_cppDir; headerFileName += pCoClass->m_className; headerFileName += ".cpp"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( coClassImpl.GetBuffer(0) ); coClassImpl.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); } CString tlbImpl = GenerateTLBImpl( pTypeLibHolder ); headerFileName = m_cppDir; headerFileName += pTypeLibHolder->m_typeLibName; headerFileName += ".cpp"; headerFile.Open( headerFileName, CFile::modeCreate | CFile::modeWrite ); headerFile.WriteString( tlbImpl.GetBuffer(0) ); tlbImpl.ReleaseBuffer(); headerFile.Close(); m_fileList.push_back( headerFileName ); }CString TypeLibraryConverterDlg::GenerateTLBImpl( TypeLibHolder* pTypeLibHolder ){ CString result = ""; result += "//" + pTypeLibHolder->m_typeLibName + ".cpp\n\n"; if ( TRUE == m_singleUnitPerClass ) { result += "#include \"" + pTypeLibHolder->m_typeLibName + ".h\"\n"; result += "#include \"" + pTypeLibHolder->m_typeLibName + "Interfaces.h\"\n"; } else { switch ( this->m_fileDistributionType ) { case SINGLE_FILE_FOR_TLB : { result += "#include \"" + pTypeLibHolder->m_typeLibName + ".h\"\n"; } break; case SINGLE_FILE_FOR_IFACE_COCLASS : { result += "#include \"" + pTypeLibHolder->m_typeLibName + "Interfaces.h\"\n"; } break; case SINGLE_FILE_FOR_IFACE_TYPEDEF_COCLASS : { result += "#include \"" + pTypeLibHolder->m_typeLibName + "TypeDefs.h\"\n"; result += "#include \"" + pTypeLibHolder->m_typeLibName + "Interfaces.h\"\n"; } break; } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?