Après avoir installé MapForce, un exemple de projet client de MapForce API pour C# est disponible dans le répertoire C:\Users\<username>\Documents\Altova\MapForce2025\MapForceExamples\API.
Pour compiler et exécuter l’exemple, ouvrez la solution .sln file dans Visual Studio et exécutez Déboguer | Démarrer débogage ou Déboguer | Démarrer sans débogage.
Note : | Si vous avez un système d’exploitation 64-bit et que vous utilisez une installation 32-bit installation de MapForce, ajoutez la plate-forme x86 dans le Manager de configuration de la solution et générez l’exemple en utilisant cette configuration. Une nouvelle plateforme x86 (pour la solution active dans Visual Studio) peut être créée dans le nouveau dialogue de la plateforme de solution (Build | Manager de configuration |plateforme de solution active | <New…>). |
Lorsque vous exécutez un exemple, un formulaire Windows est affiché contenant des boutons invoquant des opérations de base de MapForce :
•Démarrer MapForce
•Créer un nouveau design de mappage
•Ouvrez le fichier CompletePO.mfd file du dossier ...\MapForceExamples (veuillez noter que vous allez éventuellement devoir ajuster le chemin pour indiquer le dossier \MapForceExamples sur votre appareil)
•Générez le code C# dans un répertoire temp
•Arrêter MapForce
Liste de codes
Cette liste est dotée de commentaires pour faciliter la compréhension. Le code consiste essentiellement en une série de gestionnaires pour les boutons dans l’interface utilisateur affichée ci-dessus.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // Une instance de MapForce accédée par le biais de son interface d’automatisation. MapForceLib.Application MapForce; // Emplacement d’exemples installés avec MapForce String strExamplesFolder; private void Form1_Load(object sender, EventArgs e) { } // gestionnaire pour le bouton « Démarrer MapForce » private void StartMapForce_Click(object sender, EventArgs e) { if (MapForce == null) { Cursor.Current = Cursors.WaitCursor; // si nous n’avons pas d’instance de MapForce, nous en créons une et la rendons visible. MapForce = new MapForceLib.Application(); MapForce.Visible = true; // localiser des exemples installés avec MapForce. int majorVersionYear = MapForce.MajorVersion + 1998; strExamplesFolder = Environment.GetEnvironmentVariable("USERPROFILE") + "\\My Documents\\Altova\\MapForce" + Convert.ToString(majorVersionYear) + "\\MapForceExamples\\"; Cursor.Current = Cursors.Default; } else { // si nous avons déjà une instance de MapForce en cours d’exécution, nous changeons son indicateur de visibilité. MapForce.Visible = !MapForce.Visible; } } // gestionnaire pour le bouton « Open CompletePO.mfd » private void openCompletePO_Click(object sender, EventArgs e) { if (MapForce == null) StartMapForce_Click(null, null); // Ouvrir un des exemples de fichiers installés avec le produit. MapForce.OpenDocument(strExamplesFolder + "CompletePO.mfd"); } // gestionnaire pour le bouton « Créer un nouveau mappage » private void newMapping_Click(object sender, EventArgs e) { if (MapForce == null) StartMapForce_Click(null, null); // Créer un nouveau mappage MapForce.NewMapping(); } // gestionnaire pour le bouton « Arrêter MapForce » // arrêter l’instance d’application en libérant l’objet COM. private void shutdownMapForce_Click(object sender, EventArgs e) { if (MapForce != null) { // permettre l’arrêt de MapForce en libérant l’IU MapForce.Visible = false; // explicitement libérer l’objet COM try { while (System.Runtime.InteropServices.Marshal.ReleaseComObject(MapForce) > 0) ; } finally { // éviter un accès plus tardif de cet objet. MapForce = null; } } } // gestionnaire pour le bouton « Générer le code C# » private void generateCppCode_Click(object sender, EventArgs e) { if (MapForce == null) listBoxMessages.Items.Add("start MapForce first."); // les erreurs COM sont renvoyées à C# comme exceptions. Nous utilisons un bloc try/catch pour les gérer. try { MapForceLib.Document doc = MapForce.ActiveDocument; listBoxMessages.Items.Add("Active document " + doc.Name); doc.GenerateCHashCode(); } catch (Exception ex) { // L’appel COM n’a pas été couronné de succès. // Probablement qu’aucune instance d’application n’a été lancée ou aucun document n’est ouvert. MessageBox.Show("COM error: " + ex.Message); } } delegate void addListBoxItem_delegate(string sText); // appeler du thread d'interface utilisateur private void addListBoxItem(string sText) { listBoxMessages.Items.Add(sText); } // méthode wrapper pour permettre d’appeler les méthodes de contrôle IU depuis un thread de travail void syncWithUIthread(Control ctrl, addListBoxItem_delegate methodToInvoke, String sText) { // Control.Invoke: Exécute sur le thread IU, mais le thread appelant attend la saisie avant de poursuivre. // Control.BeginInvoke: Exécute sur le thread IU et le thread appelant n’attend pas l’achèvement. if (ctrl.InvokeRequired) ctrl.BeginInvoke(methodToInvoke, new Object[] { sText }); } // gestionnaire d’événement pour l’événement OnDocumentOpened private void handleOnDocumentOpened(MapForceLib.Document i_ipDocument) { String sText = ""; if (i_ipDocument.Name.Length > 0) sText = "Document " + i_ipDocument.Name + " was opened!"; else sText = "A new mapping was created."; // nous devons synchroniser le thread appelant avec le thread IU car // les événements COM sont déclenchés depuis un thread de travail addListBoxItem_delegate methodToInvoke = new addListBoxItem_delegate(addListBoxItem); // appeler syncWithUIthread avec les arguments suivants : // 1 - listBoxMessages - zone de liste pour afficher les messages depuis les événements COM // 2 - methodToInvoke - un délégué C# qui indique la méthode qui sera appelée depuis le thread IU // 3 - sText - le texte à afficher dans la zone de liste syncWithUIthread(listBoxMessages, methodToInvoke, sText); } private void checkBoxEventOnOff_CheckedChanged(object sender, EventArgs e) { if (MapForce != null) { if (checkBoxEventOnOff.Checked) MapForce.OnDocumentOpened += new MapForceLib._IApplicationEvents_OnDocumentOpenedEventHandler(handleOnDocumentOpened); else MapForce.OnDocumentOpened -= new MapForceLib._IApplicationEvents_OnDocumentOpenedEventHandler(handleOnDocumentOpened); } } } } |