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

API, COM et SDKs Delphi Discussion :

Utilisation API COM VBA ->DELPHI


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Utilisation API COM VBA ->DELPHI
    Bonjour à tous,

    je crois bien que je patine lamentablement.
    Je souhaite utiliser une API (Forexconnect) sous DELPHI, mais les exemples sont sous VBA.

    En pièce jointe, un extract du mode d'utilisation de cette API.
    J'ai installé le tlb, et les type sont correctement reconnus .

    Les essais réalisés bloquent lors de la compilation pour des pbs de type. (en particulier Createoleobject ...)

    Si l'un d'entre vous pouvait me donner des conseils pour transformer les lignes du paragraphe 3 de VBA vers DELPHI, ce serait top.

    Merci de vos réponse et à bientôt
    Images attachées Images attachées

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 256
    Points
    25 256
    Par défaut
    Utilise l'importateur de Bibliothèque de type, il va te générer un Wrapper Component qui t'exposera les méthodes de l'objet, il encapsulera les problématique d'instanciation

    Etudie en Delphi les notions de EarlyBiding et LateBiding !

    Peux-tu nous extraire le VBA a te traduire ainsi que ta tentative en Delphi ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Explications / éclaircissements
    Tout d’abord, merci de m’avoir répondu et de m’aider à progresser.

    0 – contexte
    Jusqu’à présent, j’utilisais une interface com (O2GO) qui fonctionnait avec D7, mais qui n’est plus maintenue. Je dois donc passer à FOREXCONNECT API qui est fournie en (bin, bin-com, java, net). J’ai compris que je devais utiliser bin-com avec D7.

    1- WRAPPER
    Le fichier dispo pour es interfaces com est fxcore2.com.dll. Je l’ai ouvert avec delphi7 en tant que bibliothèque de type, et cela a généré un tlb (en pièce jointe). Je comprends que ce tlb est bien le wrapper.

    2- Early binging et later binding
    Pour moi O2GO travaillait en late binding car mes variables étaient déclarées en OLEVARIANT, et le compilateur ne me proposait rien après un point. De plus, certaines erreurs n’étaient pas détectées à la compilation, mais à l’exécution. Par contre Fxcore2 me semble travailler en early binding (déclarations typées et proposition lors de la compilation)

    3- En pièces jointes, le tlb, les pas (pg test dans main_nicolas_extract.pas), un pdf expliquant comment utiliser l’API en VBA.

    Cependant, reprise des principales infos ci-dessous pour te gagner du temps
    Les commentaires O2GO est ce qui marchait avec O2GO en D7
    Les commentaires VBA sont la syntaxe qu’ils proposent en VBA
    Les lignes sans commentaires sont ce que j’ai fait maintenant en D7

    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
    Uses
     fxcore2_com_tlb
     
    Var
    //  O2GO oCore: OleVariant; 
    //  O2GO oTradeDesk: OleVariant;
    // VBA Private fxTransport As fxcore2_com.Transport
    // VBA Private WithEvents fxSession As fxcore2_com.Session
        fxtransport:fxcore2_com_tlb.Transport;
        fxsession:fxcore2_com_tlb.session;
     
    Exécution
    // O2GO  oCore := CreateOleObject('Order2Go.Core');
    // VBA Set fxTransport = CreateObject("fxcore2.com.Transport")
         fxtransport:=createoleobject('fxcore2.com.transport');
     
    //  O2GO oTradeDesk := oCore.CreateTradeDesk('trader');  
    // VBA Set fxSession = fxTransport.createSession()
    ???
      // O2GO oTradeDesk.Login(edUserName.Text, edPassWord.Text, edURL.Text, cbConnection.Text);
    // VBA Call Session.login("userID", "password","http://www.fxcorporate.com/Hosts.jsp", "Demo")
            fxsession.login(edUserName.Text, edPassWord.Text, edURL.Text, cbConnection.Text);

    Lors de la compil, l’erreur suivante m’est retournée :
    Code : fxtransport:=createoleobject('fxcore2.com.transport');
    Compil : [Erreur] Main_nicolas_extract.pas(69): Types incompatibles : 'IDispatch' et 'ITransport'
    J’espère avoir été clair …

    Avec mes remerciements
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 256
    Points
    25 256
    Par défaut
    Pourquoi ne pas écrire tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
        fxtransport:fxcore2_com_tlb.ITransport; // prèfère les types en I***, l'autre n'est qu'un alias
        fxsession:fxcore2_com_tlb.ISession;
     
    begin
    ...
       fxtransport := fxcore2_com_tlb.CoTransport.Create(); // tout simplement CoTransport qui est le Wrapper gérant la ITransport
       fxsession := fxTransport.createSession();
       fxsession.login(edUserName.Text, edPassWord.Text, edURL.Text, cbConnection.Text);
    Sinon tout objet Automation est utilisable en EarlyBiding, il suffit d'importer la TLB
    Pour le LateBiding, j'ai eu des difficultés avec certains passages de paramètres que je n'ai pas pu écrire en VBA mais uniquement en Delphi, mais comme la résolution des OLEVariant est faite au RunTime, les appels sont plus lents

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Corrections injectées mais ...
    Bonjour,

    je viens d'injecter/tester les corrections.
    La compilation se déroule correctement, mais à l’exécution, j'ai un message d'erreur "classe non enregistrée" pour la ligne : fxtransport := fxcore2_com_tlb.CoTransport.Create();
    Ai-je mal installé/ référencé fxcore2_com_tlb ?


    Merci de ton aide

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 256
    Points
    25 256
    Par défaut
    Tu as importé la classe depuis le fichier "C:\Program Files (x86)\Candleworks\ForexConnectAPIx64\bin-com\fxcore2.com.tlb"

    Du x64 dans un x86, bizarre cette installation !

    Note le x64 donc tu installes un objet 64Bits mais D7 va générer un exe 32bits
    Si OS 64Bits, un Exe 32Bits peut-il utiliser COM 64Bits en In-Process ?
    Par précaution, installe la version 32bits de l'objet et utilse le TLB du dossier x86.

    Un objet COM 64Bits Out-Process (hébergé dans un EXE comme Word et non une DLL) est il me semble utilisable sans restriction

    Tu as bien fait un RegSrv32 sur "fxcore2.com.dll"
    Tu as peux-être un conflit de registre 32 et 64Bits ! la classe n'est installé qu'en 64bits et pas en 32

    Si tu as toujours des soucis, utilise la version NET de l'API, voir
    Ou peut-être même un RegASM /tlb, on peut penser que l'Assembly ne supporte pas l'Interopérabilité COM donc tu ne pourras pas l'utiliser directement

    Il te faudra toi même coder un Wrapper\Proxy en C# qui fournira l'Interop-COM
    leur "fxcore2.com.dll" est probablement juste un Wrapper Interop

    L'utilisation d'un Wrapper, est la solution que l'on a retenu au bureau pour utiliser Crystal Report 2008 qui ne fourni plus que les composants Java ou .NET mais plus de version VCL !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Suite
    Merci pour cette réponse rapide.


    Je vais refaire des essais sur la base de tes suggestions, mais ... cela est un peu compliqué pour ma connaissance "surfacique" des ces concepts.

    Cependant, 3 commentaires trouvés dans le descriptif de l'API
    1 Qu'est-ce que ForexConnect COM ?
    ForexConnect COM est une bibliothèque de prise en charge qui permet d'utiliser l'API ForexConnect comme serveur COM « in-process ». Elle est conçue pour les applications Windows qui ne peuvent pas utiliser la bibliothèque ForexConnect standard ou les bibliothèques de prise en charge pour .NET et Java. Il s'agit par exemple des applications VBScript, Microsoft Excel, etc.

    2 Avertissement
    ForexConnect COM utilise l'API ForexConnect .NET (version 1.1.3 avec gestionnaire de tableaux). Pour savoir comment commencer à utiliser la bibliothèque, consultez la section « Getting Started » du fichier d'aide .chm fourni avec la bibliothèque.
    Notez que si vous utilisez une version 32 bits de l'API ForexConnect et l'API ForexConnect COM sur un système Windows 64 bits, vous devez utiliser une version 32 bits du moteur hôte de VBScript (%windir%\syswow64\cscript.exe) pour exécuter les programmes vbs.
    Si vous utilisez une version 64 bits de MS Office, veuillez exécuter une version 64 bits de l'API ForexConnect et de l'API ForexConnect COM.

    3 Fichier de commande qui inscrit dans le registre avec Regasm
    @ECHO Register fxcore2.com library for using via COM
    RegAsm fxcore2.com.dll /codebase /tlb:fxcore2.com.tlb
    Dans tous les cas, merci de ton aide

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    quel RegAsm utilises-tu? celui 32 bits ou 64 bits?
    (C:\Windows\Microsoft.NET\Framework ou C:\Windows\Microsoft.NET\Framework64)

    edit: de ce que j'ai lu, il faut utiliser le 32 bits pour pouvoir faire ce que tu veux.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Linkin Voir le message
    quel RegAsm utilises-tu? celui 32 bits ou 64 bits?
    (C:\Windows\Microsoft.NET\Framework ou C:\Windows\Microsoft.NET\Framework64)

    edit: de ce que j'ai lu, il faut utiliser le 32 bits pour pouvoir faire ce que tu veux.
    Bonjour,
    je ne sais pas. Je suis en Windows 7 (et Delphi 7), et je n'ai fait aucune modification.

    Je vais effectivement désinstaller mes API Forexconnect, et réinstaller en 32 bits.

    A suivre, mais bien compliqué ... , mais pas beaucoup plus clair pour FXCM!
    http://fxcodebase.com/code/viewtopic...22e342c74b890a


    Merci

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Suite
    Bonjour,

    après de nomreuses manips (très nombreuses"), je me suis aperçu qu'il y avait un pb avec regasm. Donc, le dll ne devait donc pas être accessible !

    C:\Program Files\Candleworks\ForexConnectAPIx64\bin-com>RegAsm fxcore2.com.dll /
    codebase /tlb:fxcore2.com.tlb
    Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.5420
    Copyright (C) Microsoft Corporation 1998-2004. All rights reserved.

    RegAsm : error RA0000 : An error occurred while writing the registration informa
    tion to the registry. You must have administrative credentials to perform this t
    ask. Contact your system administrator for assistance
    J'étais bien loggé en tant qu'administrateur sur W7 familiale, mais cela ne semble pas suffire !
    Je me suis donc octroyé des droits de super administrateur (net user + modif registre) et l'inscription en base de registre est ok!

    A suivre avec d'autres tests.

    Merci

Discussions similaires

  1. [CR 2008] Utilisation par COM ou par API ?
    Par ShaiLeTroll dans le forum SDK
    Réponses: 1
    Dernier message: 12/07/2012, 10h19
  2. [VBA] Utilisation API FindWindows
    Par idir.17 dans le forum Général VBA
    Réponses: 5
    Dernier message: 28/03/2007, 14h39
  3. [API-VBA]utilisation API Printer
    Par Alexandre Sahli dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/03/2007, 13h24
  4. [D2005]Comment utiliser des assembly développées en delphi
    Par Valéry dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 16/08/2005, 18h36
  5. Comment utiliser Developpez.com pour résoudre votre problème
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 08/01/2005, 11h11

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