1 / 13

Intégration Excel / C++

Intégration Excel / C++. Intégration de code C++ et C dans Excel. Créer une DLL. Pour créer une nouvelle librairie dynamique, il faut : Créer un projet C++, avec type DLL Inclure le projet dans une solution

rich
Download Presentation

Intégration Excel / C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Intégration Excel / C++ Intégration de code C++ et C dans Excel

  2. Créer une DLL • Pour créer une nouvelle librairie dynamique, il faut : • Créer un projet C++, avec type DLL • Inclure le projet dans une solution • Pour accéder aux fonction de la DLL il faut connaître le nom sous lequel elles sont exportées : l’interface de la DLL. • Excel ne peut accéder que à des fonction qui traitent des paramètres et retourne des valeurs de types reconnus. • Excel ne peut pas accéder directement à des classes.

  3. Vérifier l’interface d’une DLL avec Dependencywalker Arborescence de dépendances Interface

  4. Hello World en Excel/C++ Fichier HelloWorld.cpp #include <wtypes.h> #include <string.h> BSTR __stdcallcHello(void) { char *mess="Hello World"; BSTR ret=SysAllocStringByteLen(mess,strlen(mess)); return ret; }

  5. Définition de l’interface Fichier HelloWorld.def LIBRARY HelloWorld EXPORTS cHello

  6. Instruction Declare en VBA • Le code C++ doit être compilé et distribué dans une librairie dynamique (DLL). • On ne peut accéder que aux fonctions qui ont été exportées par le créateur de la DLL. Declare Function cHello Lib "HelloWorld.dll" () As String Function Hello() As String Hello = cHello() End Function

  7. Passage de paramètres • On peut passer des données entre VBA et C++. Si une variable est passée ByRef depuis VBA, alors en C++ le paramètre correspondant doit être déclaré comme pointeur. • On peut passer un array de VBA vers C++ en passant par référence le premier élément d’un tableau de taille suffisante. • On peut aussi utiliser le type Variant de VBA et y inclure un tableau.

  8. Équivalence de Types

  9. Instruction Declare sous VBA • Pour accéder à une fonction C++ dans VBA on utilise l’instruction Declare. • Deux syntaxes: • [Public|Private] Declare Sub name Lib “libname” [Alias “aliasname”][([arglist])] • [Public|Private] Declare Function name Lib “libname” [Alias “aliasname”] [([arglist])] [As Type]

  10. Interface sans fichier def • On peut exporter des fonctions d’une DLL sans avoir recours à un fichier def. • Il est impératif de précéder chaque fonction d’une directive • __declspec(dllexport) • Il est conseillé de débrancher la décoration C++ en utilisant la directive : • extern "C"

  11. Appel d’une DLL sans def depuis VBA • Deux possibilitées: • Repérer le nom décoré à l’aide de Dependecy Walker. • Repérer l’ordinal. ' Fonctiondeclaree par ordinal Declare Function Get_nprime Lib "excel_demo.dll" Alias "#2" _ (ByVal n&) As Integer ' subroutine declaree par nom Declare Sub Get_allprime Lib "excel_demo.dll" Alias "_all_prime@12" _ (ByVal n&, ByRefsz&, ByRefpr_list&)

  12. Ordinal et nom décoré Nom décoré Ordinal

More Related