Problème de dll pour VBA pour un nul

Signaler
Messages postés
88
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
 BruNews -
Bonjour à tous, je suis grand débutant en C++ et je m'y met apres VBA
Je voudrais faire une dll en c++ car VBA ne va assez vite, le problème c'est que je n'arrive à rien, ca fait 1/2 journée que je suis dessus et je deviens fou !!!!

je dispose de Microsoft Visual Studio 2003.NET je voudrais faire un truc super simple :

//mon code .cpp

#include "Def.h"
void__stdcall HelloWorld(void )
{
    MessageBox(NULL,"Hello !","Message",MB_OK);
}

//Mon code .h

#include "windows.h"
#define export __declspec (dllexport)

export void__stdcall HelloWorld(void );

//mon appelle de cette dll dans VBA
PrivateDeclareSub HelloWorld Lib"Fonctions.dll" ()

Je ne trouve pas (n'arrive pas à generer) la DLL... je n'ai pas le projet de type Win32 DLL proposé ...???
qqn peut il m'aider svp ???

wis : in tartiflette I trust (like the others)

23 réponses

Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Ecrit un nouveau fichier appelé main.cpp, et écrit dedans :

#include <windows.h>
#pragma linker("/subsystem:dll")

BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID)
{
    return TRUE;
}
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Je sais pas si il exporte bien ses fonctions. Tu pourrais essayer:

#define EXPORT(x) extern "C"  x __declspec(dllexport) __stdcall

EXPORT(void) HelloWorld(void );

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Oui c'est vrai. Mais bon il faudrait deja qu'il réussisse à générer sa DLL...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oui mais attention tu t'ai trompé.

#include <windows.h>
#pragma comment(linker, "/subsystem:dll")

BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID)
{
    return TRUE;
}

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
88
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Ok mais dans quel type de projet ???
File/New Project/Win32 Project ou Win 32 Console?? je n'ai que cela de dispo ... tandis que sur d'autres version j'avais Win 32 DLL ...

wis : in tartiflette I trust (like the others)
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Met n'importe quel projet, la ligne #pragma linker("/subsystem:dll") va dire de générer une DLL windows.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ichhh. Ben normalement avec le pragma tu devrais être correct. À tu la PSDK? Sinon il te la faut pour faire de la programmation win32 sur VCExpress 2005.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oups trop tard... Mais ce que je dit pour la SDK tien toujours cependant.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Relis son message : il dit bien qu'il utilise VS 2003...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ok mais c'est une version .NET. Bon on sais jamais. Encore un chose. Fais attention, c'est pas
#pragma linker("/subsystem:dll")
mais
#pragma comment(linker, "/subsystem:dll")

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
88
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 juillet 2007

// cpp2vba.cpp : Defines the entry point for the console application.



#include
"stdafx.h"


#include
<windows.h>


#pragma



comment
(linker, "/subsystem:dll")
#include "cpp2vba.h"

BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID)
{

return
TRUE;
}







void



__stdcall
HelloWorld(

void
)
{
MessageBox(NULL,"Hello !","Message",MB_OK);
}






// cpp2vba.h : Defines the entry point for the console application.



#include
"windows.h"


#define
export

__declspec
(

dllexport
)
export

void



__stdcall
HelloWorld(

void
); Pfffffff alors là en fait ca ne compile même plus j'ai comme erreure :

c:\Documents and Settings\umansky\My Documents\Visual Studio Projects\cpp2vba\cpp2vba.cpp(4): fatal error C1083: Cannot open precompiled header file: 'Debug/cpp2vba.pch': No such file or directory

wis : in tartiflette I trust (like the others)
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Va dans les options du projet et essaie de trouver l'onglet parlant des "Precompiled headers", et desactive l'utilisation des precompiled headers.
Messages postés
88
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 juillet 2007

T'es un geni ca compile ...

1. Je viens de faire quoi ?
2. Comment je genere ma dll maintenant ?

wis : in tartiflette I trust (like the others)
Messages postés
88
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Lorsque je build mon projet j'ai ùmaintenant l'erreur suivante
cpp2vba fatal error LNK1117: syntax error in option 'subsystem:dll'

wis : in tartiflette I trust (like the others)
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Les precompiled headers servent à compiler une fois pour toutes les headers qui ne seront pas modifiés, comme windows.h, etc... Ca permet de gagner du temps pendant la compilation, mais ça donne certaines contraintes(obligation d'inclure le precompiled header dans TOUS les fichiers...).

Normalement, ta solution se compile et va former une DLL. Si il ne fait que compiler, utilise la commande Build dans les menus qui va effectuer les commandes de link.
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
En effet, je viens de regarder et c'est /dll au lieu de /subsystem:dll.

Rajoute aussi :
#pragma comment(linker, "/out:"Debug/nom_du_fichier.dll")
et remplace nom_du_fichier par le nom souhaité de ta DLL. Cela te générera un fichier .DLL.
Messages postés
88
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Ben malheureusement qd je fais
Build /Build Solution je choppe l'erreur  cpp2vba fatal error LNK1117: syntax error in option 'subsystem:dll'

PS : dans les proprietes j'ai 
Configuration/proprieties/configuration Type : Application (exe) je devrais pas avoir DLL à la place ... ?

Rmq : ca donne la même erreur mias bon ...

wis : in tartiflette I trust (like the others)
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Regarde ma réponse juste au dessus, j'ai donné la solution...
Messages postés
88
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 juillet 2007

Bravo !!! c'est bon juste pour ceux qui referont ce que je viens de faire c'est
#pragma comment(linker, "/out:Debug/nom_du_fichier.dll")

(un " en trop mais c t évident)
merci beaucoup nightlord de ta patience, je vais essayer de le faire executer par vba ...

PS : tu as dejà essayé de faire executer une dll par vba ?

wis : in tartiflette I trust (like the others)
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Non je n'ai jamais fait de VB, ni de VBA, ni de VBS...
Je reste uniquement dans le C/C++, le JS (de temps en temps), le HTML/CSS/PHP, et le CGI en C.