IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

[ActiveQt] Compatibilité avec .Net pour un add-in Solidworks


Sujet :

Qt

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut [ActiveQt] Compatibilité avec .Net pour un add-in Solidworks
    Bonjour,

    Je me lance dans la réalisation d'une addin pour Solidworks.
    Je me demande si l’implémentation par le biais d'ActiveQt est réalisable.

    Beaucoup de documentation existe pour VB.net ou C#; mais très peu pour le C++.
    Avec VB.net express, j'ai fait une DLL des plus simples qui fonctionne correctement.

    Solidworks API

    Voici le code:

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Explicit On
     
    Imports System
    Imports SolidWorks.Interop.sldworks
    Imports SolidWorks.Interop.swconst
    Imports SolidWorks.Interop.swpublished
     
    Public Class SwAddin
        Implements SolidWorks.Interop.swpublished.SwAddin
     
        Function ConnectToSW(ByVal ThisSW As Object, ByVal Cookie As Integer) As Boolean Implements SolidWorks.Interop.swpublished.SwAddin.ConnectToSW
     
            MsgBox("Hello!")
     
            ConnectToSW = True
        End Function
     
        Function DisconnectFromSW() As Boolean Implements SolidWorks.Interop.swpublished.SwAddin.DisconnectFromSW
     
            DisconnectFromSW = True
        End Function
    End Class

    Et dans AssemblyInfo.vb
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Imports System.Reflection
    Imports System.Runtime.InteropServices
     
    <Assembly: AssemblyTitle("")> 
    <Assembly: AssemblyDescription("")> 
    <Assembly: AssemblyCompany("")> 
    <Assembly: AssemblyProduct("")> 
    <Assembly: AssemblyCopyright("")> 
    <Assembly: AssemblyTrademark("")> 
     
    <Assembly: AssemblyVersion("1.0.*")> 
    <Assembly: ComVisibleAttribute(True)>

    Par contre dans C++, c'est moins facile
    J utilise les cpp/h generés avec dumpcpp depuis les .TLB. Et je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include "solidworks.h"
    #include "swpublished.h"
    #include "swconst.h"
     
    using namespace SolidWorks;
    using namespace SwPublished;
    using namespace SwConst;
     
    class Q_DECL_EXPORT swAddin : public ISwAddin
    {
        Q_OBJECT
        Q_CLASSINFO("Version", "1.0")
        Q_CLASSINFO("ClassID", "{7a4cffd8-cbcd-4ae9-ae7e-343e1e5710df}")
        Q_CLASSINFO("Insertable", "yes")
     
    public:
        boolean ConnectToSW(ISldWorks *swApp, int cookie);
        boolean DisconnectFromSW();
    }
    (+ le code des fonctions dans le cpp)

    J'arrive à compiler ma DLL correctement mais lorsque je charge la DLL dans solidworks, celui ci me dit qu'il ne peut la charger. En debug, Solidworks indique "RPC Server is not available".


    Je n ai pas laché l'affaire. Je me suis dit que j allais commencer simple.
    Donc, j'ai tenté de d'abord faire une DLL simple avec VC2010 express sans qt sans activeqt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #pragma once
     
    //Import the SolidWorks
    #import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
    #import "swpublished.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids 
    #import "swconst.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids 
     
    using namespace System;
     
    public class __declspec(dllexport) swAddin: public ISwAddin
    {
    public:
    	swAddin();
    // ISwAddin
    	STDMETHOD(ConnectToSW)(IDispatch * ThisSW, LONG Identifier, VARIANT_BOOL * IsConnected);
    	STDMETHOD(DisconnectFromSW)(VARIANT_BOOL * IsDisconnected);
     
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    swAddin::swAddin()
    {
     
    }
     
    STDMETHODIMP swAddin::ConnectToSW(IDispatch * ThisSW, LONG Cookie, VARIANT_BOOL * IsConnected)
    {
    	MessageBox(NULL,  _T("Hello world!"), _T("ConnectToSW called"), MB_OK | MB_ICONERROR);
     
    	return S_OK;
    }
     
    STDMETHODIMP swAddin::DisconnectFromSW(VARIANT_BOOL * IsDisconnected)
    {
    	return S_OK;
    }

    Et la, j arrive également à compiler mais dans Solidworks, en debug, c'est le même topo : "RPC Server is not available". (je suppose que c'est Remote Procedure Call ?).

    Je crois que certains concepts m’échappent entre la simplicité du VB.net et C++... Si quelqu'un à quelques infos...

    Merci d'avance pour votre lecture

    Cordialement,

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut


    SolidWorks supporte-t-il les add-ins natifs (ce que tu tentes de faire en C++ dans tes deux derniers bouts de code) ? C'est peut-être là le problème : tente de faire quelque chose en C++/CLI, donc en managé, exécuté sur le framework .Net, plus en natif (voir les options de Visual C++ pour ça).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Merci dourouc. C'est bien ce que je croyais.

    J'avoue ne pas connaitre C++/CLI. Je vais lire ceci en détail:
    http://dotnet.developpez.com/faq/cpp...i#whatiscppcli
    ainsi que http://nico-pyright.developpez.com/t...c2005/interop/

    Cependant, cela n'a l air ni simple, ni performant...

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par RapotOR Voir le message
    cela n'a l air ni simple
    Quand tu prends du C++ et que tu y ajoutes des trucs particuliers en plus, le résultat n'aurait pas pu être différent .

    Citation Envoyé par RapotOR Voir le message
    ni performant...
    Si tu n'utilises que des pointeurs managés, cela reviendra à écrire ton code en C# ou en VB.Net ou en F#, donc ça sera aussi rapide. Maintenant, si tu mélanges du natif, je ne sais pas comment c'est implémenté (faut-il changer de contexte d'exécution ou pas ?), donc ça pourrait donner un gain comme d'énormes pertes. Fonce, tu verras bien si c'est problématique (puisque c'est possible sans devoir écrire des choses trop horribles, il est logique de penser que ça doit fonctionner au moins assez bien).

Discussions similaires

  1. Framework .Net, Compatibilité avec le matériel ?
    Par zambizi dans le forum C++/CLI
    Réponses: 2
    Dernier message: 15/01/2008, 00h01
  2. Réponses: 2
    Dernier message: 22/08/2007, 15h39
  3. [VB.NET] font.colorindex pour excel avec .NET
    Par beegees dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/07/2006, 17h17
  4. compatibilité des réels avec pascal (pour fichier de record)
    Par jacquesberger dans le forum Langage
    Réponses: 2
    Dernier message: 12/08/2005, 20h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo