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

 C++ Discussion :

Besoin d'une ame charitable pour tester une DLL


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut Besoin d'une ame charitable pour tester une DLL
    Bonjour a tous

    Je me presente, je suis un passionné de programmation depuis que je suis tout jeune, mais entre la programmation et moi, c'est un peu comme certaines relations avec les femmes....je les adorent mais ce n'est apparement pas reciproque

    Donc n'etant pas tres bon dans ce domaine, et voulant quand meme assouvir ma passion, je me suis jeté sur les basics divers qui se sont succédés depuis 30 ans.
    Je vous rassure je suis aussi le pire des programmeurs basic, meme apres tout ce temps, mais grace a lui j'ai fait plein de choses que je n'aurais meme pas revé faire en C

    Le C est plus qu'un reve pour moi, mais on ne sait jamais ...dans une autre vie

    Donc voici les presentations faites...je me permet de vous deranger, pour vous demander un petit service.
    Je sais que ceci risque de ne pas plaire a certains, mais comme je vous l'ai dit plus haut, quand on a ce qu'on a ...on fait ce que l'on peut....pas ce que l'on veut

    Et moi ce que j'aurais voulu toujours faire...c'est des vraies DLL
    Pas active X, les vraies que l'on retrouve dans windows.
    Ceci etant impossible avec VB, la mort dans l'ame j'ai du m'en passer.

    Seulement voila, un petit malin, a eu l'idée de mettre a la porté des programmeurs VB, les sacro saintes DLL standard, enfin d'apres ses dire
    Je le remercie donc au passage
    http://bbil.developpez.com/traductions/vb6/create-dll/

    Bref, grace a un membre du forum VB (L'autodidacte) et ses gentilles explications, j'ai pu modifier mon VB6 pour qu'il créé une de ces DLL toute simple

    Seulement voila, j'aurais aimé etre sur que c'est bien une DLL standard, comme les connait le C, et c'est donc a ce moment que j'aurais besoin d'une ame charitable qui pourrait me donner le code en C pour faire fonctionner cette petite
    Je ne voudrais pas que par "DLL standard", ce membre parle seulement du fait que les DLL faites par cette combine, ne soit plus obligées d'etre enregistrées dans la BDR

    Voici donc la DLL et tous ces codes
    http://erdsjb.free.fr/PureStorage/Pr...DLLinteger.zip

    M'excusant encore de vous deranger, vous les professionnels de la programmation

    Je vous remercie de m'avoir lu et vous souhaite une excelente journée

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'ai lancé le .exe
    J'ai eu une petite fenêtre avec le chiffre 5
    Puis avec le nombre 5120,
    Puis f'affichege d'une fenètre (environ 10 cm) nommée Form1
    Pareil une seconde fois.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Oui si tu regarde le code source qui est livré avec, tu verras que c'est juste le chiffre 5 qui est envoyé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Declare Function TestPb Lib "Dll.dll" (ByRef VarString As Long) As Long
     
    Public Sub Form_Load()
     
     ChDrive (Left(App.Path, 1))
     ChDir App.Path
     Dim RetourDll As Long
     RetourDll = TestPb(5)
     MsgBox RetourDll
     
    End Sub
    Et que dans la DLL, je le multiplie 10 fois par 2

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Option Explicit
     
    Public Const DLL_PROCESS_DETACH = 0
    Public Const DLL_PROCESS_ATTACH = 1
    Public Const DLL_THREAD_ATTACH = 2
    Public Const DLL_THREAD_DETACH = 3
     
    Public Function DllMain(hInst As Long, fdwReason As Long, _
      lpvReserved As Long) As Boolean
       Select Case fdwReason
          Case DLL_PROCESS_DETACH
             ' No per-process cleanup needed
          Case DLL_PROCESS_ATTACH
             DllMain = True
          Case DLL_THREAD_ATTACH
             ' No per-thread initialization needed
          Case DLL_THREAD_DETACH
             ' No per-thread cleanup needed
       End Select
    End Function
     
     
    Public Function TestPb(Number As Long) As Long
     
     MsgBox Number
     Dim i As Integer
     
     For i = 1 To 10
      Number = Number * 2
     Next
     
     TestPb = Number
     
    End Function
    Ce que j'aurais aimé c'est un code VC 6 ++ qui permette de remplacer mon code VB6, c'est a dire appeller cette DLL dans les memes conditions

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Joli article sur le VB6.
    C'est le genre de bidouille que les programmeurs VC++6 font pour avoir des messages d'erreurs plus explicite avec la STL (librairie standard du C++). Bidouilleurs de tous les langages, unissez-vous.

    Pour ma par, pour vérifiez la qualité de l'exportation dune dll, j'ai toujours tendance à utiliser Dependency Walker (http://www.dependencywalker.com/)

    Cet utilitaire donne la liste des fonctions exportées par les dll.

    Une DllActiveX, est une Dll standard, elle exports 4 fonctions avec les conventions C.
    Elle utilise COM pour que les autres méthodes et classes soit visible, et c'est un mécanisme standard sous Windows, mais effectivement ce n'est pas du C/Win32.

    .NET, la nouvelle plateforme M$ utilise aussi facilement COM(ActiveX) que Win32(C), et COM est bien plus puissant. Donc pas de complexe.

    Un export Win32, c'est juste pour l'interopérabilité avec des langages non .NET. Et beaucoup de mécanismes deWindows n'accepte que COM.

    Regardez avec Dependency Walker, les deux types de dll et vous pourrez très facilement les distinguer. Et même voir les anomalies d'export des dll.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    J'ai vu avec Dependancy Walker (et ton fichier *def) les deux fonctions exportées: DllMain ORDINAL 1 et TestPb ORDINAL 2.

    Je ne connais pas VB, mais si tu donnes le prototype des fonctions que tu veux qu'on teste on pourrait le faire sans regarder ton code VB.

    Le prototype des fonctions c'est la liste + type de arguments et le type (ou void) de retour. Par exemple pour une fonction qui lit en args. un réel et un entier et retoune y^n le prototype pourrair être:

    double power (double x, int i);

    Tu devrais aussi dire la convention d'export que ton compilo utilise: _fastcall, _cdecl ou _stdcall. Chaque convention travaille d'un mode différent. ceci oblige que le prog. appellant et le prog appellé (ta dll) utilisent la même convention. Wint NT et succeseurs utilisent _stdcall.

    Bonne journée!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Bonjour et merci beaucoup de votre reponse BACELAR

    Je n'ai pas tout compris ce que vous avez eu l'amabilité de m'expliquer, mais j'ai téléchargé l'outil que vous m'avez indiqué.

    Effectivement c'est un outil de professionnel
    La seule chose que j'ai comprise, c'est au milieu a droite la liste des fonctions de ma DLL.

    Je suis perdu...certains disent que ce genre de DLL ne pourra jamais etre une DLL standard, d'autre comme vous laisse planer un doute

    Pour ce qui est de DOT NET, j'ai acheté aussi le 2003, pas encore utilisé car je l'ai trouvé tres compliqué, et je ne crois pas non plus que VB.NET soit capable de creer des DLL standard simples comme le fait VC6 ++

    Cette histoire de DLL c'est vraiment l'enfer

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Bonjour FDR2006

    En fait je ne sais pas grand chose de cette DLL
    J'ai fait comme indiquait le membre de Developpez pour creer une soi-disante DLL standard avec VB6.

    C'est meme encore pire, car c'est une traduction d'une methode apparement.
    Je ne connais pas la convention, mais je suppose, enfin j'espere comme vous l'avez dit que c'est _stdcall autrement ça complique encore un peu je crois.

    Normalement, j'envois un long (5) et la DLL le multiplie 10 fois par 2, pour retourner le resultat en long egalement.
    C'est tout ce que je connais car ça c'est moi qui l'ai ecrit...
    Pour le reste je ne sait pas du tout ce que fait VB

    En tout cas merci a vous deux de votre reponse

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Salut,

    J'ai fait un petit prog C++ appellant mais le link donne:

    Linking...
    Dll.def : error LNK2001: unresolved external symbol TestPb
    Release/CCaller.lib : fatal error LNK1120: 1 unresolved externals
    LINK : fatal error LNK1141: failure during build of exports file
    Error executing link.exe.

    Cherche dans les options de compilation (au mois danc VC++6 de MS le choix de la convention d'appel se trouve là) que _stdcall soit choisi. Il peut aussi avoir un pb de "décoration du nom exporté".

    Bonne chance.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Pas de panique, vous n'avez pas besoin de connaître toutes les options.

    Quand vous demandez à Dependency Walker d'ouvrir un composant logiciel comme une dll, un exe ou un ocx, il regarde la liste des dll utilisées par le composant logiciel. Il construit un arbre avec le composant logiciel comme racine et les dll dont il dépend comme fille de cette racine.
    Il continue récursivement à construire l'arbre en lisant les dll donc le le composant dépend et y cherche les dll dont dépend la première dll et ainsi de suite. Cela construit un arbre qui est affiché en haut à gauche.

    La partie inférieur de l'IHM reprend cette arborescence de dll sous la forme d'un tableau plat, plus simple à lire pour la résolution de certain problème comme la ou les versions des dll utilisées par le composant logiciel.

    La partie en haut à droite est fonction du noeud sélectionné dans l'arbre affiché en haut à gauche.
    Vous sélectionnez un noeud dans l'arbre et cette partie affiche dans le tableau "PI" (au-dessus) la liste des fonctions (symboles) utilisées par la dll sélectionnée qui doit être fournit par une dll dont elle dépend (c'est la table d'import).
    La partie inférieure "E" est celle qui vous intéresse le plus, car elle correspond à la table d'export, c'est ce que fournit (exporte) le noeud sélectionné dans l'arbre.

    Si vous désélectionnez la racine de l'arbre et que c'est votre dll, cous verrez les symboles exportés par votre dll.

    Une dll standard, cela n'existe pas.
    Il est standard de faire des Dll avec un export de type COM/ActiveX dans les composants logiciels applicatifs et il est standard de faire des dll avec un export de type "C" pour les couches bases systèmes ayant un faible niveau d'abstraction.

    Le faible niveau d'abstraction interdit l'utilisation simple de classes ou d'objet dans les export "C" et même les conventions d'appels peuvent ne pas être indiqué dans l'export des dll type "C".
    Pour utiliser correctement et facilement une dll type "C", il faut un .h qui permet de spécifier les signatures et les conventions d'appel et un fichier .lib qui implémente la convention d'appel, voir les optimisations d'appel.

    Donc ne soyez pas jaloux, et regarder la table d'export avec et sans la bidouille. Vous verrez rapidement la différence et vous pourrez vérifier l'utilisation d'un export type "C".

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Je te remercie FDR2006 d'avoir essayé
    Mais je crois bien que c'est peine perdue

    En fait le topic pour soi-disant creer une vraie DLL avec VB6 est en partie faux.
    Je pense que la seule chose que cette DLL a de commun avec les DLL C, c'est qu'il n'est plus besoin de l'enregistrer dans la BDR, et que l'on peut l'appeler par un DECLARE.
    Mais a part ça ...elle ne doit pas avoir grand chose de commun

    A la lumiere de ce que m'a dit BACELAR, j'ai comparé une DLL C, avec ma DLL et elle n'appelle pas du tout la meme DLL
    La DLL VB6 appelle le runtime de VB "MSVBVM60.DLL", ce qui veut bien dire que ce n'est pas une DLL C.
    Les autres appellent MSVCRT.DLL, je ne sait pas ce que c'est...mais en tout cas ce n'est pas le runtime
    Donc merci BACELAR de la combine
    Et excusez moi encore de vous avoir dérangé avec mes bidouilles

    Peut etre qu'un jour je serais assez grand pour pouvoir faire du C, ce qui est un des reves de ma vie.

    En attendant, je vous souhaite tres bonne continuation, et au plaisir de vous retrouver peut etre un jour

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Votre attitude face au C me fait penser à un homme de Cro-Magnon (donc un Sapiens Sapiens) en adoration devant la puissance des hommes de Neandertal.

    Les hommes de Neandertal étaient plus puissants, plus robustes mais spécialement adaptés à l'aire glacière qui c'est terminée il y a 20000 ans.

    La toundra où le C est encore adapté, c'est dans l'embarqué, et elle se réduit de plus en plus.
    Et comme l'homme de Neandertal, le C manque cruellement d'outils intégrés d'abstraction.

    On va arrêter de filer la métaphore.

    FDR2006 a un problème d'édition de lien, très probablement parce qu'il utilise un mécanisme qui nécessite un fichier d'en-tête (.h) et une librairie d'importation (.lib de dll). L'utilisation d'une dll par un programme en C sous Windows n'a pas besoin, dans l'absolu, de ces fichiers, mais cela nécessite l'utilisation des primitive LoadLibrary (http://msdn.microsoft.com/en-us/libr...75(VS.85).aspx) et GetProcAddress (http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx), très laborieuses à utiliser.

    Il faut noter que l'utilisation de la bidouille dans VB génère le fichier .lib nécessaire à FDR2006. Il ne reste que le fichier d'en-tête (.h) que FDR2006 semble avoir déjà créé.

    Donc le problème de FDR2006 est lié, je pense, à une mauvaise manipulation du côté du client de test en C et non à votre dll.



    En regardant la copie d'écran de Dependency Walker, vous voyez que la dll exporte 6 fonctions.
    "DllCanUnloadNow", "DllGetClassObject", "DllRegisterServer", "DllUnregisterServer" sont les quatre fonctions nécessaires à l'utilisation par COM/ActiveX.
    "DllMain" et "TestPb" sont des fonctions exportées supplémentaires que vous avez vous même désignées avec votre fichier DLL.def.

    Avec les 4 fonctions COM/Active, vous disposez d'une dll utilisable par tout les langages COM aware, comme VB6, mais aussi le C++ (avec VC++6 ou Visual Studio) et tous les langages .NET (via InterOp COM/.NET).

    Avec la fonction "TestPb", vous disposez d'une fonction appelable depuis un langage acceptant des dll exportant selon les conventions "C", donc à peu près tous les langages dont le "C" ou VB (via Declare).

    Attention, votre dll dispose de 2 interfaces (ensembles de fonctionnalités) distinctes, celles accessibles depuis l'interface COM, donc l'ensemble des classes définies dans votre dll (peut-être aucune), et celles accessibles par l'ensemble des fonctions spécifiées dans le fichier Dll.def.

    J'insiste sur le fait que l'interface COM est d'un niveau d'abstraction et d'une facilité d'utilisation bien supérieure à celle exportée via des fonctions "C" aware. Le seul avantage de la seconde interface est son utilisation possible par des langages anciens ou ayant une très faible intégration dans la plateforme Windows.

    Vous avez donc une Dll bien meilleure que votre objectif initial.

    Il faut aussi remarquer, pour les spécialiste, que l'exportation de la dll ne suis pas les conventions de nommage des exports "C" (http://blogs.msdn.com/b/oldnewthing/.../08/48616.aspx). Ces conventions ne sont pas obligatoire mais peuvent faciliter l'utilisation de la dll en absence de fichier .lib.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je pense que la seule chose que cette DLL a de commun avec les DLL C, c'est qu'il n'est plus besoin de l'enregistrer dans la BDR, et que l'on peut l'appeler par un DECLARE.
    Vous avez même mieux qu'une Dll C.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mais a part ça ...elle ne doit pas avoir grand chose de commun
    C'est une "Dll C", avec des choses en plus (un interfaçage COM/ActiveX).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La DLL VB6 appelle le runtime de VB "MSVBVM60.DLL", ce qui veut bien dire que ce n'est pas une DLL C.
    Non, c'est une Dll C, qui peut utiliser n'importe quelle dll dans l'implémentation de ces fonctionnalités. Oui, votre dll utilise le Runtime VB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les autres appellent MSVCRT.DLL, je ne sait pas ce que c'est...mais en tout cas ce n'est pas le runtime
    Et bien si, c'est le Runtime-C (MSVCRT -> M$ Visual C RunTime).

    Je pense que vous considérez une Dll C avec une aura de mystère qui n'existe pas. Une dll ayant une interface compatible C est bien plus archaïque que celle de VB. Cet archaïsme permet aux langages archaïques, comme le C, de pouvoir s'en servir.
    C'est un nivellement par le bas.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    MONSIEUR BACELAR, je ne vous connais pas, mais je crois que je tombe deja amoureux de vous
    Vous expliquez avec le don d'un professeur, et cette fois j'ai tout compris, et croyez moi, si vous me connaissiez a votre tour, vous comprendriez que c'est un miracle
    Vous etes genial, vous venez de me redonner espoir....

    Alors ma DLL est une super DLL, avec deux "moteurs" dedans comme les voitures "hybrides" et je peux me servir de celui que je veux...
    Ce que je n'est pas essayé, c'est de voir si une fois "bidouillée" elle peut encore etre utilisée en ActiveX, c'est à dire COM je crois

    Je suis pas au bout du chemin, mais vous venez de me donner un coup de pied au ....qui m'a fait du bien et avancer

    Moi ce que je cherche, c'est justement à retourner en arriere, je suis fatigué de ces versions de Visual studio de plus en plus grosses, avec X DVD, intransportables, lourdaux, etc...
    Mon reve a moi, ce serais maitriser le C et le VC6 ++ et je pourrais mourrir en paix
    D'apres mes calculs, et vu la vitesse ou j'apprend l'informatique, je devrais pouvoir me reposer à peu pres en 4056

    Je sais que je vais peut etre creer une levée de bouclier.
    Mais pour moi, il n'existe que 3 réels langages, le langage machine, "l'assembleur" et le C et C++
    Bien sur je ne parle pas des anciens langages speciaux qui ne me sont pas utiles, mais qui sont encore utilisé, je crois (COBOL, FORTRAN....) et je ne parle pas non plus des langages WEB qui bientot viendront remplacer tous les autres

    Bref pour le LM et l'ASM, ce sera dans une autre vie...
    Mais le C/C++ j'en reve presque tous les jours.
    Je viens encore aujourd'hui de ranger mon etagere de 20 livres au moins sur lui, en soupirant
    Ce qui est le plus dur dans le C...c'est pas d'acheter les livres...c'est de les lire...et peut meme de les comprendre

    Le C a presque tout créé donc il doit pouvoir tout utiliser ce qui existe...
    Quand on voit la communauté LINUX, on s'apperçoit que rien n'arrete le C.
    Bien sur les moutons comme moi auront besoin de bergers pour mettre a leur disposition des librairies qui permettent d'acceder a l'inaccessible
    Je crois bien que la librairie DisHelper, met l'objet COM a la portée du C, par exemple, si j'ai bien compris ce que j'ai lu

    Je suis un nostalgique, et adore ce qui est efficace, et conci

    Bref pour en revenir a ma DLL, je me doit de tout vous dire.
    Je ne voulais pas compliquer ce POST en parlant d'un 3e langage

    En fait, j'utilise 2 langages simultanements, Visual basic 6 et le PureBasic
    Le second, je pense que tu vous ne devez pas le connaitre, il a été créé par un petit français "Cocorico"...qui a un tres haut niveau en informatique, et qui a voulu donner aux burnes comme moi, la possibilité de programmer bas niveau.

    Ce compilateur est fait en C, et compile en ASM directement.
    Il a aussi entre autre, le plus de pouvoir intégrer dans le meme code de l'ASM et du basic.
    Il a tellement d'avantages que je ne pourrais pas tous les dire, et ce n'est pas non plus le but de ce POST, mais il sait creer des DLL standard C aussi facilement que l'on créé des EXE
    C'est d'ailleur outre sa portabilité, son bas niveau, sa syntaxe, ce qui m'a attiré vers lui

    Comme je suis un handicapé de l'informatique, j'ai trouvé ce "palier" pour pouvoir coder plus bas niveau que VB et surtout plus simplement, on peut mettre le langage complet sur une clef USB, il est donc portable, et surtout pouvoir acceder aux DLL.
    En attendant de pouvoir un jour me mettre au C, mais comme ce langage a été pensé comme le C, avec une syntaxe plus simple (Le basic), il m'a permis de commencer a comprendre les pointeurs, et plein d'autres choses qui sont justement les points difficiles du C.
    Grace a lui, je sais que bientot, enfin je l'espere, je pourrais venir grossir la communauté du C et enfin pouvoir discuter avec des MAITRES de la programmation que vous etes
    Il vaut toujours mieux parler à dieu qu'a ses saints

    Tout serait bien dans le meilleur des mondes, si seulement mon travail ne m'obligeait pas a utiliser VB et VBA.
    Alors depuis 5 ans, je tente de coder, avec mon bas niveau aussi , des EXE en VB et en PB, accompagnés de DLL C crée par PB.

    Seulement voila, VB est tres compliqué a utiliser pour ce qui est du passage des tableaux de variables, des structures, et des strings
    Alors je me bute sur les problemes de BSTR, et d'UNICODE sans parler du mal qu'a VB a acceder a la mémoire nativement.

    Donc le debut de l'histoire a été que je voulais passer une structure de VB a une DLL, j'ai donc demandé de l'aide sur le forum VB.
    Et un gentil membre m'a aiguillé sur le fait que VB pouvait aussi faire des DLL standard en le "bidouillant"

    J'ai donc créé ma DLL que je vous ai présentée, et j'ai essayé de l'appeler avec PB qui utilise le standard StdCall par defaut.
    Et j'ai comme reponse "Point d'entrée de la DLL introuvable"
    J'ai donc demandé de l'aide sur le forum de PB qui a été infructueuse.
    Car la bas, on m'a dit que c'est impossible d'appeller une DLL VB avec du C, donc avec PB non plus

    Alors je me suis dit, que si quelqu'un du forum C pouvait me faire un petit bout de code qui prouve ce que vous venez de m'expliquer, c'est a dire que l'on peut se connecter avec le C a cette DLL "Frankeinstein" de VB, et ceci meme si elle est encore "ActiveX" mais que l'on utilise pas cette partie, qui ne m'est en fait pas utile
    Et bien, il serait facile de convertir ce code C en PB, qui est assez proche au niveau du fonctionnement, car c'est le desir de son createur.

    Voila..... j'espere que je ne vous ai pas trop embrouillé, mais cette fois vous savez tout

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Citation Envoyé par andrebernard Voir le message
    Alors ma DLL est une super DLL, avec deux "moteurs" dedans comme les voitures "hybrides" et je peux me servir de celui que je veux...
    Heu, là, vous avez, si l'ont continu sur la métaphore, un guidon de moto et un volant de voiture. C'est pas sûr que ce guidon ou ce volant aient un quelconque effet sur les roues et que les chacun ne dirigent pas leur propre jeu de roues. Et, si nous n'avons pas de chance, enclencher la clé de contact peu tout faire péter. Il faut faire quelques tests, et avoir le guidon et le volant interchangeable, cela ne se fera pas sans pas mal de boulot.

    Citation Envoyé par andrebernard Voir le message
    Ce que je n'est pas essayé, c'est de voir si une fois "bidouillée" elle peut encore etre utilisée en ActiveX, c'est à dire COM je crois
    COM ou ActiveX, c'est la même chose.

    Citation Envoyé par andrebernard Voir le message
    Moi ce que je cherche, c'est justement à retourner en arriere, je suis fatigué de ces versions de Visual studio de plus en plus grosses, avec X DVD, intransportables, lourdaux, etc...
    Moi, je suis plus feignant que passéiste, je préfère télécharger gratuitement les 2Go de VS2010 Express, avec la documentation complète et avoir plein d'API et de Designers qui me permettent de faire très rapidement et efficacement les programmes nécessaire pour hier.
    Citation Envoyé par andrebernard Voir le message
    Mon reve a moi, ce serais maitriser le C et le VC6 ++ et je pourrais mourrir en paix
    Je ne voudrais pas être rabat-joie, mais une fois "connu" le C et C++, vous allez connaître leurs limitations ou lourdeurs (en plus de leurs points forts, quand même). Et les concepts de langages à typage dynamique, de programmation fonctionnelle, de programmation par contrainte, de programmation par aspects, de programmation logique ou de méta-programmation (pour le C) etc. sont des champs d'utilisation de la programmation qui ne sont pas réellement utilisable avec ces langages.
    Citation Envoyé par andrebernard Voir le message
    Je sais que je vais peut etre creer une levée de bouclier.
    Mais pour moi, il n'existe que 3 réels langages, le langage machine, "l'assembleur" et le C et C++
    Bien sur je ne parle pas des anciens langages speciaux qui ne me sont pas utiles, mais qui sont encore utilisé, je crois (COBOL, FORTRAN....) et je ne parle pas non plus des langages WEB qui bientot viendront remplacer tous les autres
    Vous avez une vue bien trop parcellaire de la programmation. Il n'y pas que la programmation système. C'est une partie infime du développement informatique.
    Citation Envoyé par andrebernard Voir le message
    Bref pour le LM et l'ASM, ce sera dans une Le C a presque tout créé donc il doit pouvoir tout utiliser ce qui existe...
    Quand on voit la communauté LINUX, on s'apperçoit que rien n'arrete le C.
    Idem, il faut utiliser le bon langage en fonction du type de problème à résoudre, d'où l'intérêt de connaitre le plus de type de langage possible. Et c'est comme pour les langues vivantes, plus on en connait plus c'est facile, et cela à une échelle bien plus grande.
    Citation Envoyé par andrebernard Voir le message
    Je crois bien que la librairie DisHelper, met l'objet COM a la portée du C, par exemple, si j'ai bien compris ce que j'ai lu
    Cela permet d'utiliser deux types "particuliers" d'interface COM, les interfaces de type "dispatch" et de type "dual" (dual car elle est dispatch et "direct"), depuis des langages qui ne support pas COM. Je crois que VB utilise/génère, par défaut, des interfaces de type "dual". Dans les faits, je ne vois que le le C car le C++ avec VisualStudio gère automatiquement tous les types d'interface COM.

    Citation Envoyé par andrebernard Voir le message
    Je suis un nostalgique, et adore ce qui est efficace, et conci
    Si vous maitrisez les nouveaux outils, le résultat sera bien plus efficace qu'avec les anciens. C'est la raison d'être de ces nouveaux outils. Mais maîtriser ces outils demande de la rigueur et de la patience.

    Citation Envoyé par andrebernard Voir le message
    Il a aussi entre autre, le plus de pouvoir intégrer dans le meme code de l'ASM et du basic.
    C'est très moyen pour la portabilité du code.
    Citation Envoyé par andrebernard Voir le message
    Comme je suis un handicapé de l'informatique, j'ai trouvé ce "palier" pour pouvoir coder plus bas niveau que VB et surtout plus simplement, on peut mettre le langage complet sur une clef USB, il est donc portable, et surtout pouvoir acceder aux DLL.
    "portable" ?? On ne doit pas avoir la même définition de la portabilité.
    Evitez les intermédiaires inutiles qui ne font que compliquer les problèmes.
    Le C, vous pouvez l'apprendre très rapidement, pas forcement le maîtriser. Le problème avec les intermédiaires, c'est que pour résoudre des problèmes d'interopérabilité, il faut très bien maîtriser les deux côtés de la couche intermédiaires.

    Citation Envoyé par andrebernard Voir le message
    Seulement voila, VB est tres compliqué a utiliser pour ce qui est du passage des tableaux de variables, des structures, et des strings
    Alors je me bute sur les problemes de BSTR, et d'UNICODE sans parler du mal qu'a VB a acceder a la mémoire nativement.
    Le problème n'est pas lié à VB, le passage de tableau et autres strings est un problème complexe dans les langages de bas niveaux type C qui a été résolu par l'utilisation de COM. Avec des langages COM aware comme VB et VC++6 c'est beaucoup plus simple.

    Citation Envoyé par andrebernard Voir le message
    Donc le debut de l'histoire a été que je voulais passer une structure de VB a une DLL, j'ai donc demandé de l'aide sur le forum VB.
    Et un gentil membre m'a aiguillé sur le fait que VB pouvait aussi faire des DLL standard en le "bidouillant"
    Comme je l'ai dit, il est plus simple d'utiliser l'interfaçage COM pour passer des tableaux ou des structures d'une DLL à une autre.

    Citation Envoyé par andrebernard Voir le message
    J'ai donc créé ma DLL que je vous ai présentée, et j'ai essayé de l'appeler avec PB qui utilise le standard StdCall par defaut.
    Et j'ai comme reponse "Point d'entrée de la DLL introuvable"
    C'est très important, quel est le nom exacte du point d'entré introuvable. Cela permettra de savoir si PB veux des noms décorés ou pas.

    Citation Envoyé par andrebernard Voir le message
    J'ai donc demandé de l'aide sur le forum de PB qui a été infructueuse.
    Car la bas, on m'a dit que c'est impossible d'appeller une DLL VB avec du C, donc avec PB non plus
    Il n'est absolument pas impossible d'appeler une DLL COM avec du C, la preuve en est avec DispHelper, c'est que c'est loin d'être à la porté du péquin moyen, très très loin.

    Citation Envoyé par andrebernard Voir le message
    Alors je me suis dit, que si quelqu'un du forum C pouvait me faire un petit bout de code qui prouve ce que vous venez de m'expliquer, c'est a dire que l'on peut se connecter avec le C a cette DLL "Frankeinstein" de VB, et ceci meme si elle est encore "ActiveX" mais que l'on utilise pas cette partie, qui ne m'est en fait pas utile
    Heu, ici c'est C++, pas C, et ne dites pas que c'est la même chose, ou les cerbères du forum vous déchiquetterons.

    Citation Envoyé par andrebernard Voir le message
    Et bien, il serait facile de convertir ce code C en PB, qui est assez proche au niveau du fonctionnement, car c'est le desir de son createur.

    Voila..... j'espere que je ne vous ai pas trop embrouillé, mais cette fois vous savez tout
    Avec le nom du point d'entré demandé par PB, on pourra avoir une vue plus précise du problème.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Encore merci de toutes ces applications, vous ne pouvez pas savoir ce que cela fait plaisir de pouvoir converser avec quelqu'un comme vous
    Quand on est perdu comme moi, et qu'on entend de tous les sons de cloches, et qu'en plus on en comprend aucun

    En plus depuis 5 ans qu'ils me trainent sur le forum de PB, et que suis toujours aussi mauvais...ils ont beau etre patient...je les fatigue un peu avec mes idées à la ....

    Oui le terme portable a plusieur significations, et toutes sont valables, j'ai vérifié.
    C'est un telephone
    C'est un ordinateur
    C'est un logiciel qui fonctionne sur plusieurs OS
    C'est un logiciel qui s'installe sur une clef et qui n'a pas de dependances

    Il serait peut etre temps que l'on trouve d'autres mots dans les millions de mots de la langue française pour celui de l'informatique...
    Parce que les conversations commencent a etre dur
    C'est vrai..il l'aurait appellé "jambon beurre" ce serait peut etre ridicule..mais au moins on se tromperait pas a chaque fois que l'on parle de deux choses qui n'on rien a voir...ce n'est pas la premiere fois que j'ai cette conversation

    Pour le coté multiplateforme...PB l'est aussi en plus d'etre portable, il va sur LINUX et meme MAC

    Pardon d'avance pour le C et le C++, je ne veux vexer personne...bien au contraire...juste me faire des amis dans un monde ou je n'ai pas ma place, mais qui me passionne depuis 30 ans
    J'ai compris que le C maintenant etait plus pour creer des langages, des drivers, linux, puisque si je me trompe, il est la base de presque tout, meme de mon langage PB

    Cela fait tellement d'années que je vois cet icone de VC6 ++ troner a coté du VB6 et que ça me gratte de cliquer dessus.
    Voyez pour la librairie Dishelper un membre de PB l'a adapté pour PB en librairie, il l'a appelé PureDisHelper, et un autre en open source, il l'a appelé COMATE.
    Juste pour finir l'info sur ce langage, j'ai oublié de vous dire que depuis peu il est meme reconnu dans ce grand site de la programmation qui est géré par un des membres

    http://www.developpez.net/forums/f91...sic/purebasic/

    Le probleme c'est que je n'ai pas plus d'infos, juste "point d'entrée non trouvé" et pour ce qui est de l'edulcoration.....moi je croyais que vous parliez soda

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Argentine

    Informations forums :
    Inscription : Mars 2006
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    Bonjour André,

    Une fois lu en diagonal cet ensemble des Q et R, je me permets de te suggérer la lecture de Bruce Eckel: "Thinking in C++" et spécialement le chapitre 3 "Le C dans C++". C'est une excellente présentation des divers aspects de l'un et de l'autre. C'est un livre de distribution gratuite, et bien que j'utilise la version anglaise puisque je suis aussi confortable dans l'une que dans l'autre, je suis presque certain qu'il y a une bonne traduction en langue française.

    Il l'introduit avec ces paroles:

    Since C++ is based on C, you must be familiar with the syntax of C in order to program in C++, just as you must be reasonably fluent in algebra in order to tackle calculus.
    Alors, vas y et "tackle" C/C++

    Bon courage.


    Bon courage!

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Pour moi l'anglais je le parle communément ...mais sous la torture
    Ce qui ne facilite pas les choses

    Merci de tes encouragements

  17. #17
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par andrebernard Voir le message
    Alors je me bute sur les problemes de BSTR, et d'UNICODE sans parler du mal qu'a VB a acceder a la mémoire nativement.

    :
    salut Andre de quoi as-tu besoin ? Les BSTR c'est trop complexe pour quelq'un qui ne maitrise pas VC++6.
    Si tu as besoin d'un ocx en C++ dis le moi à condition que cela ne soit pas un projet de 100 000 lignes

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    En pièce jointe, je fournis une solution VS2010 (IDE dont la version "Express" est gratuite de M$ : http://www.microsoft.com/express/Downloads/)
    Dans cette solution, il y a 2 projets, un projet C++ d'application console, "UtilisationDllintegerEnModeExplicite", et une application Windows, "UtilisationDllintegerEnModeExpliciteG".
    Ces projets utilisent le chargement explicite de dll (LoadLibrary, ...) car le fichier lib fourni par andrebernard semble particulier. En utilisant l'utilitaire dumpbin (fourni avec VS2010), les symboles définis dans la lib semblent ne pas correspondre aux fonctions exportées par la dll.
    Si vous lancez les exécutables générés par les projets, vous verrez que la dll se charge correctement, que la récupération de l'adresse de la fonction aussi, mais lors de l'appel de la fonction, le machine virtuelle VB se lance et plante lors de l'utilisation de oleaut32.dll. Il faudrait, éliminer toute référence d'objet VB comme "MsgBox", d’utiliser les options de génération de VB pour avoir un code compilé et non interprété.
    Je ne dispose pas de l'environnement VB6 pour être plus précis sur le problème.

    Mais dans les faits, votre dll export bien des fonctions appelables en C, mais, comme vous le voyez des la code des projets, c'est loin d'être une sinécure.

    Comme l'indique Mat.M, l'utilisation des BSTR est bien plus simple en utilisant COM/ActiveX.

    Si PureBasic dispose d'une extension permettant d'utiliser COM/ActiveX, il sera bien plus productif de l'utiliser pour accéder aux classes d'objets implémentés dans VB qui de passer par l'utilisation d'export C, bien plus complexe inutilement.
    Fichiers attachés Fichiers attachés

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 309
    Points : 58
    Points
    58
    Par défaut
    Merci MAT.M de ta proposition, mais je n'ai pas besoin d'OCX.
    A te lire les BSTR c'est pas du gateau
    Voila pourquoi, je ne m'en sort pas
    Encore merci quoi qu'il en soit de ta gentille proposition

    Merci à nouveau BACELAR de vous etre donné toute cette peine
    Eeeehhh ben !!! un truc de dingue ce passage EXE/DLL

    Sur le forum PB, des copains m'avaient trouvé justement comment me connecter avec COM, mais le probleme qui reste entier, c'est que pour que cela fonctionne, il faut que cette DLL soit enregistrée.
    Et c'est justement la que le bas blesse, retour a la case depart

    Bon apparement, cette DLL n'est ni chien, ni loup....
    Comme vous l'avez dit precedemment, ce n'etait pas sur que le volant tourne les roues

    Un voiture avec deux moteur et qui n'avance pas....

    Et en plus c'etait un exemple des plus simple juste pour commencer...
    Alors je ne vous parle meme pas du passage des structures...si un integer ce n'est pas une sinécure....comment va se comporter un tableau, une structure...

    Le soucis c'est que j'ai deja VS 2003 avec license sur ma machine....
    J'ai essayé d'ouvrir votre projet...mais je n'y suis meme pas arrivé
    Je vois le code, c'est tout quand je clique sur le CPP

    J'ai un peut peur d'installer encore le 2010 express en plus, car deja quand j'ai installé le 2003, j'avais des problemes avec VS6

    C'est justement tout ça qui me fatigue avec CROSOFT...c'est des usines à gaz, et en plus elles se marchent sur les pieds

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Pas de soucis pour installer VS2010 avec VS2003.

    Sur le forum PB, des copains m'avaient trouvé justement comment me connecter avec COM, mais le probleme qui reste entier, c'est que pour que cela fonctionne, il faut que cette DLL soit enregistrée.
    Les dll enregistrées, c'est pour simplifier la vie du développeur et de l'administrateur. C'est quoi le problème avec l'enregistrement ?

    Et en plus c'etait un exemple des plus simple juste pour commencer...
    Alors je ne vous parle meme pas du passage des structures...si un integer ce n'est pas une sinécure....comment va se comporter un tableau, une structure...
    En utilisant COM, le passage de structure ou de tableau est simplifié par rapport au même passage via "C".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un voiture avec deux moteur et qui n'avance pas....
    Il faut juste trouvez où est le frein à main et le réservoir d'essence.

    Mais restez avec COM.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/09/2009, 15h19
  2. besoin d'une ame charitable en php
    Par bijouxenbois dans le forum Devis
    Réponses: 9
    Dernier message: 15/04/2008, 14h48
  3. trigger pour tester une clé primaire
    Par keumlebarbare dans le forum PL/SQL
    Réponses: 3
    Dernier message: 15/04/2007, 10h29
  4. Réponses: 7
    Dernier message: 09/11/2006, 18h57
  5. [Wifi]Logiciel pour tester une connection wifi ?
    Par genoud dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 15/08/2005, 13h29

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