2009-11-28 9 views
1

J'écris actuellement un cadre de plug-in pour Winamp C# (essentiellement, une implémentation C# de l'API Winamp/SDK, ainsi qu'un modèle de plug-in barebones). Comme les bibliothèques C# ne peuvent pas exporter les points d'entrée DLL, j'utilise un wrapper C++/CLI qui charge simplement la bibliothèque C#. Je voudrais créer un modèle Visual Studio pour cela, ce qui crée à la fois la bibliothèque de plug-in barebone C#, et l'emballage C++. Toutefois, si je clique sur le fichier → Modèle d'exportation, seul le projet C# est répertorié.Modèle Visual Studio 2008 contenant à la fois un projet C# et un projet C++/CLI?

Est-il possible de créer un modèle multi-projet contenant à la fois un projet C# et un projet C++/CLI? Si c'est le cas, comment?

Répondre

2

J'ai trouvé la réponse moi-même il y a longtemps, et j'ai oublié de la mettre à jour correctement. Un fichier .vstemplate peut être utilisé pour créer un modèle C++ en définissant la langue sur CSharp comme dans les modèles C# (cela fonctionnera toujours correctement).

Voici un exemple que je l'ai utilisé: .vstemplate file et all other files

WiX also uses this method

+0

+1 Merci, cette technique semble être le moyen le plus facile de créer un modèle C++ – ceztko

1

« modèle d'exportation » ne fonctionne pas pour les projets C++. Si vous voulez des modèles pour eux, vous devez le créer vous-même: voir ma réponse here. Cela implique du travail, mais si vous utilisez beaucoup ce genre de projets, le travail est bien passé.

modifier

Je regardais mon code, quelque chose comme cela devrait vous aider à démarrer; La méthode onFinish dans default.js est appelée après avoir cliqué sur 'Ok' dans les assistants par défaut. Notez que je n'ai pas testé ça!

function onFinish(selProj, selObj) 
{ 
    var strProjectPath = wizard.FindSymbol('PROJECT_PATH'); 
    var prjCpp; 
    var prjCs; 
    CreateProjects(strProjectPath, prjCpp, prjCs); 
    //project config here 
    prjCpp.Object.Save(); 
    prjCs.Object.Save(); 
    selProj = prjCpp; 
} 

function CreateProjects(path, prjCpp, prjCs) 
{ 
    var strProjTemplatePath = wizard.FindSymbol('ABSOLUTE_PATH'); //get template from our template dir 
    var strProjTemplateCpp = strProjTemplatePath + '\\default.vcproj'; 
    var strProjTemplateCs = strProjTemplatePath + '\\default.csproj'; 
    var Solution = dte.Solution; 

    if(wizard.FindSymbol("CLOSE_SOLUTION")) 
    { 
    Solution.Close(); 
    strSolutionName = wizard.FindSymbol("VS_SOLUTION_NAME"); 
    if(strSolutionName.length) 
    { 
     var strSolutionPath = strProjectPath.substr(0, strProjectPath.length - strProjectName.length); 
     Solution.Create(strSolutionPath, strSolutionName); 
    } 
    } 

    var oTarget = wizard.FindSymbol("TARGET"); 
    prjCpp = oTarget.AddFromTemplate(strProjTemplateCpp, strProjectPath, strProjectName + '.vcproj'); 
    prjCs = oTarget.AddFromTemplate(strProjTemplateCs, strProjectPath, strProjectName + '.csproj'); 
    Solution.Projects.Add(prjCpp); 
    Solution.Projects.Add(prjCs); 
} 
+0

Hmm, je vois. Peuvent-ils être groupés avec un modèle C#? J'aimerais avoir à la fois un projet C# et un projet C++ créés en même temps dans la même solution. –

+0

Je n'ai pas essayé moi-même, mais il est possible definatly: depuis la création de la solution, le projet, la modification de son contenu, etc. Tout cela se passe dans les scripts js, il est pas trop difficile de créer 2 projets au lieu d'un pour la solution. – stijn

+0

Très bien, merci pour cela :) Je n'arrive pas à faire fonctionner le code. J'ai créé un nouvel assistant via New Project -> Visual C++ -> Custom Wizard, j'ai collé le code dans default.js, ouvert une nouvelle instance de Visual Studio et essayé d'utiliser l'assistant dans la nouvelle instance. Même quelque chose de simple comme une alerte ('Hello World') ne fonctionne pas dans OnFinish, donc je pense que je fais quelque chose de mal. Je vais lire plus de documentation et essayer de comprendre cela. Merci pour votre aide :) –

Questions connexes