otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008
-
16 avril 2007 à 23:14
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008
-
19 avril 2007 à 14:17
Bonjour,
J'ai écrit une DLL en delphi. J'ai crée une autre application en Delphi pour accéder les fonctions de la DLL. ça marche bien. Maintenant il faut que j'appelle les fonctions de la DLL du VBA sur un fichier Excel. J'i bien declaré la fonction. ça ne marche pas. Vous savez pour quoi?
Voilà la fonction de la DLL sur Delphi:
function NU:string; stdcall;
var
Buffer : array[0..255] of char;
BufferSize : DWORD;
begin
BufferSize := sizeOf(Buffer);
GetUserName(@buffer, BufferSize);
Result:=Buffer;
end;
exports
NU;
Voilà ma declaration sur le VBA d'Excel:
Declare Function NU Lib "C:\PrjDllDelphi\PrjDllDelphi.dll" () As String
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 18 avril 2007 à 10:20
Merci encore une fois.
Comment je change ça? Je suis allé dans projet, propriétés, ressources. La première ligne est :Définitions du preprocesseur: _UNICODE;UNICODE. Si j'efface ça, il le met à nouveau.
Otavio Reis
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 18 avril 2007 à 11:10
Brunews, merci bcp...
J'ai crée la DLL en C++ ça a compilé parfaitement bien. Ensuite je suis allé sur le VBA du Excel et je la declaré:
Declare Function bnGetUsername Lib "C:\Documents and Settings\otei\Bureau\Temporaire\X1.dll" () As String
Dans la feuille je fais appel et ça ne marche pas... J'ai utilisé ta fonction sur ton template en C++. Maintenant le pb est sur la déclaration du VBA?
Otavio Reis
Vous n’avez pas trouvé la réponse que vous recherchez ?
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 18 avril 2007 à 11:34
Je demande de debouguer en utilisant Excl comme Host et il me sort la message: Exception non gérée à 0x77fe1de8 dans EXCEL.EXE : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000104
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 18 avril 2007 à 13:28
Quel troll ce BruNews. Je m'y ferais jamais.
En même temps si y avait que ça de "faux" dans ce que j'ai dit, je peux m'estimer très heureux. Heuu, une réservation peut être ?
Donc si c'est à titre de test (cf remarque de Renfield), on peut faire comme l'API. Par exemple, quand on cherche à acceder à GetUserName depuis VB, on fait comme ça par exemple :
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 18 avril 2007 à 14:46
Je vous remercie énormement pour vos réponses... En fait, j'ai tout essayé en Delphi, en C++. Les DLLs sont crées. Les logiciels en C++ ou Delphi accèdent aux fonctions de la DLL facilement, mais le VBA n'arrive pas à lire la fonction. Si je crée des fonctions (sans pointeurs) dans une DLL, j'arrive à faire appel aux fonctions à partir du VBA. Je vous remercie encore une fois, mais je vais laisser tomber.
Si un jour quelqu'un passe par ici et arrive à appeller sur le VBA d'Excel l'une des deux fonctions ci-dessous, s.v.p., indiquez moi le chemin.
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 18 avril 2007 à 17:56
Ok, encore un test... On va y arriver... J'espère...
J'ai compilé cette fonction:
BSTR __stdcall bnGetUsername()
{
char buff[264];
DWORD len = 206;
GetUserName(buff, &len);
if(!len) buff[0] = 0;
return SysAllocStringByteLen(buff, len);
}
Je l'ai déclaré comme ça sur le VBA d'Excel:
Declare Function bnGetUserName Lib "C:\Documents and Settings\virtual\Desktop\temporaire\cDLL\Release\X1.dll" () As String
Sub test()
Debug.Print bnGetUserName()
End Sub
Dans la feuille, j'écris sur une cellule:
= test
Excel a crée un Form avec le message: "Nom non valide!
Merci BruNews, mais ça n'a pas marché... c'est bizarre... Je ne comprends pas...
Otavio Reis
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 18 avril 2007 à 18:25
BruNews, J'ai compilé la DLL en utilisant Excel comme host. J'ai mis les points d'arret dans la fonction sur la DLL. J'ai vérifié que on ne rentre pas dans la fonction. Le message est le suivant:
"Le point d'arret ne sera pas atteint pour l'instant. Aucun Symbole n'a été chargé pour ce document."
Peut-être qu'on n'arrive pas à faire l'appel à la fonction. Dans ton template, c'est écrit:
/* METTRE FICHIER "DEF" DANS
Onglet Linker => Input => Module Definition File
*/
Pendant la création de la DLL, je suis allé sur Projet --> Ajouter un nouvel élément --> fichier de définition de module .Def. Puis j'ai ajouté l'élément en donnant le même nom, mais avec l'extension Def. Le Def est comme ça:
LIBRARY "X1"
EXPORTS
bnGetUsername
J'espère qu'on puisse réperer l'erreur.
Otavio Reis