La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

1 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 : linterface 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

4 Vérifier linterface dune DLL avec Dependency walker Arborescence de dépendances Interface

5 Hello World en Excel/C++ #include BSTR __stdcall cHello(void) { char *mess="Hello World"; BSTR ret=SysAllocStringByteLen(mess,strlen(mess)); return ret; } Fichier HelloWorld.cpp

6 Définition de linterface LIBRARYHelloWorld EXPORTS cHello Fichier HelloWorld.def

7 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

8 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 dun tableau de taille suffisante. On peut aussi utiliser le type Variant de VBA et y inclure un tableau.

9 Équivalence de Types VBAC++ Byteunsigned char Boolean[signed] short Integer[signed] [long] int CurrencyCY (type de Singlefloat Doubledouble Datedouble DATE (type de StringBSTR (type de VariantVARIANT (type de

10 Instruction Declare sous VBA Pour accéder à une fonction C++ dans VBA on utilise linstruction 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]

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

12 Appel dune DLL sans def depuis VBA Deux possibilitées: Repérer le nom décoré à laide de Dependecy Walker. Repérer lordinal. ' Fonction declaree 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 _ (ByVal n&, ByRef sz&, ByRef pr_list&)

13 Ordinal et nom décoré OrdinalNom décoré


Télécharger ppt "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."

Présentations similaires


Annonces Google