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++Builder Discussion :

Piloter un APN Canon avec ED-SDK


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut Piloter un APN Canon avec ED-SDK
    J'essaie de piloter mon EOS1100D en utilisant le SDK fourni par Canon.

    J 'ai un souci dans l'utilisation de ce SDK, qui comporte :
    - une librairie : EDSDK.lib
    - plusieurs fichier header ".h"
    - plusieurs DLL

    D'après la doc, il faut inclure les fichier header (ça c'est ok)
    ensuite il faut inclure la librairie et inclure aussi les DLL : là je ne suis pas sur d'avoir fait ce qu'il faut!

    J'ai ensuite mis dans mon programme une fonction toute simple qui existe dans un fichier ".h" : EdsInitializeSDK(); et quand j'exécute j'ai ce message :

    [ILINK32 Erreur] Error: 'EdsInitializeSDK' externe non résolu, référencé depuis D:\PROJETS\C++XE2\TEST01\WIN32\DEBUG\UNIT1.OBJ

    Avez vous une idée?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Dans mon sujet DLL mélange export C et C++, j'ai été confonté à ce type de problème lorsque le Fichier LIB est dans un format différent que celui supporté par BCB
    Voir si Coff2Omf, l'outil de conversion d'une bibliothèque peut traduire ces fichiers LIB

    l'idéal, serait d'avoir la DLL et de regénérer le LIB avec implib

    Ton fichier LIB est-il accompagné d'une DLL avec le même nom ?
    Ce n'est pas un LIB contenant le Code mais un LIB d'importation de DLL
    Perso, je n'aime pas cette seconde forme, je ne comprends pas que l'on fournisse un SDK avec un LIB avec code, cela oblige d'utiliser du C\C++, cela manque une volonté d'interopérabilité avec d'autres langages !

    Pense à inclure le fichier au projet (moi, je l'ajoute comme si c'était un source, c'est bien plus efficace que l'ajout dans les chemins de bibliothèque)
    Si j'ai bien compris, Pragma Link permet l'inclusion sans l'ajout au projet
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Voici ce que comporte le SDK :
    EDSDK>DLL> plusieurs fichiers DLL
    EDSDK>DLL>ICC> plusieurs fichiers BIN et ICC
    EDSDK>HEADER> 3 fichiers .h
    EDSDK>LIBRARY> EDSDK.lib

    J'ai inclue les fichiers Header dans le programme, puis, comme tu m'as conseillé, j'ai ajouté au "Gestionnaire de projets" les DLL et la LIB.

    Résultat : [ILINK32 Erreur] Error: 'D:\PROJETS\C++XE2\TEST01\EDSDK3.LIB' contient un enregistrement OMF non valide, type 0x21 (COFF possible)

    J'ai donc utilisé Coff2Omf sur la librairie :
    Résultat : [ILINK32 Erreur] Error: 'EdsInitializeSDK' externe non résolu, référencé depuis D:\PROJETS\C++XE2\TEST01\WIN32\DEBUG\UNIT1.OBJ

    Voici ce que dit la documentation :

    Including Header Files
    The following files are required in order to use the EDSDK using C/C++ language.
    EDSDK.h, EDSDKTypes.h, EDSDKErrors.h
    Be sure to copy the three header files listed above into the header access folder of the development environment.
    Be sure to add them to the application project workspace.
    *Since these are C language header files, it is necessary to provide header files depending on the programming language.


    Linking the Library
    After header files are included, it is necessary to link the EDSDK library as described below.
    There are two methods of linking EDSDK: one where EDSDK.lib files are copied to the folder specified by a development environment library path and EDSDK.lib is specified as an import module, and another where EDSDK.dll is loaded by the LoadLibrary function.
    When loading EDSDK.dll, get pointers to each EDSDK function using the GetProcAddress function and assign them to function pointer variables. When calling each EDSDK function, make the call via the function pointer variable obtained here.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 874
    Points
    24 874
    Par défaut
    As-tu fait un CMD
    Code cmd : Sélectionner tout - Visualiser dans une fenêtre à part
    implib "C:\Dossier\EDSDK.Borland.LIB" "C:\Dossier\EDSDK.dll"
    comme je te l'avais conseillé ?

    Tu utiliseras EDSDK.Borland.LIB généré dans ton projet au lieu de celui fourni,
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Je n'avais pas encore essayé le "implib" car je voulais te décrire la totalité du SDK et qu'il y a plusieurs DLL.

    Je viens de créer le fichier EDSDK.Borland.LIB et de l'ajouter au projet, après compilation j'ai un message d'erreur dans une box : Cette application n'a pas pu démarrer car EDSDK.DLL est introuvable. La réinstallation de cette application peut corriger ce problème.
    alors que le fichier DLL est ajouter dans le "gestionnaire de projets"

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Seul le LIB doit être inclu au projet pas la DLL !

    La DLL doit être dans le même répertoire que ton executable,
    ou alors dans les chemins indiqués par la variable d'environnement PATH (comme c:\windows\system32)

    J'ignore comme indiquer le chemin de la DLL en liaison statique

    Sinon, tu vas devoir modifier les Headers de façon a avoir une liaison dynamique (pas de LIB) et une utilisation de LoadLibrary\GetProcAddress
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    je viens de m'apercevoir de mon erreur, effectivement il faut mettre la DLL là ou l'exe est créé, avec la version XE2 ce n'est pas là où sont les sources, mais dans le sous-dossier : Win32\Debug\

    Maintenant mon application compile et démarre. J'ai plus qu'à comprendre comment fonctionne le SDK.

    Merci ShaiLeTroll

    PS : Est-il possible d'inclure la DLL dans l'exe pour n'avoir qu'un seul fichier à distribuer?

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Pour l'inclusion de la DLL, il y a des possibilités comme l'inclure en ressource, mais cela ne doit pas être compatible avec la liaision statique par LIB

    Utilise InnoSetup pour créer un programme d'installation
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. SDK delphi pour apn canon powershot g9
    Par delphibou dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 19/03/2008, 16h47
  2. Problème pour piloter le port série avec TComPort
    Par Jayceblaster dans le forum Composants VCL
    Réponses: 6
    Dernier message: 08/12/2005, 14h21
  3. [VS.Net]Probleme d'installation avec DirectX SDK
    Par ThanosT dans le forum DirectX
    Réponses: 2
    Dernier message: 07/05/2005, 23h55
  4. Probleme avec Cutscene (SDK)
    Par supergrey dans le forum DirectX
    Réponses: 4
    Dernier message: 12/07/2004, 18h15
  5. [debutant] premier pas avec le SDK directX9
    Par arno2004 dans le forum DirectX
    Réponses: 6
    Dernier message: 27/05/2004, 21h03

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