begin process at 2012 05 29 11:14:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

dll pour vb6


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

dll pour vb6

lundi 7 mai 2007 à 17:54:29 | dll pour vb6

draluorg

Salut a tous,

J'essai de faire une dll en C pour utiliser sous vb6, mais je recois toujours le message "Bad dll Calling Convention" depuis vb6 :(

Voici un exemple simple pour montrer comment je 'y prends:

Code C

#include <windows.h>

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT
#endif

long DLL_EXPORT Div(long a, long b);

long DLL_EXPORT Div(long a, long b)
{

    return (a / b);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    return TRUE; // succesful
}

Declaration Vb:
Private Declare Function Div Lib "sample.dll" (ByVal a As Long, ByVal b as long) As Long


Pour info j'utilises Code Blocks avec GCC mais j'ai tester avec Visual studio 2005 et j'ai les memes erreurs...


Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...

lundi 7 mai 2007 à 20:55:55 | Re : dll pour vb6

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
VC++ 2005:
Utilise ceci:
http://www.cppfrance.com/code.aspx?ID=36940

Il y a un template tout prêt pour DLL Réglages sont mis en compil C et export stdcall comme il se doit. Faudra copier le def qui est dans le dossier template dans le dossier de ton proj.

ciao...
BruNews, MVP VC++
lundi 7 mai 2007 à 22:17:28 | Re : dll pour vb6

draluorg

Salut BruNews,

Merci beaucoup :)
Mais je dois avouer que j'ai pas trop compris le fonctionnement de ton "prog"
En fait j'ai pris le template j'ai mis ma fonction dedans j'ai ajouter le .def comme indiquer dans le fichier X1.cpp et j'ai du ajouter le nom de la fonction en dessous de Export dans le fichier .def

Au final ca marche impec, mais j'ai pas compris le system de template pour automatiser ca...

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
lundi 7 mai 2007 à 22:22:38 | Re : dll pour vb6

BruNews

Administrateur CodeS-SourceS
Le prog template ne crée que le projet muni d'un fichier cpp avec les bons réglages compilo.
Le def est à mettre à la main.

ciao...
BruNews, MVP VC++
lundi 7 mai 2007 à 22:28:57 | Re : dll pour vb6

draluorg

Erf c'est bon j'ai compris! je m'etais un peu perdu dans tous ces fichers, j'avais pas reussi a executer le prog lol

Encore merci ^^

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
dimanche 13 mai 2007 à 20:42:00 | Re : dll pour vb6

draluorg

Re,

J'ai un gros soucis avec memset
si je mets un memset tout ce compile normalement sans erreur ni warning
mais lorsque je veux utiliser la dll depuis vb6 il me met que ma dll est introuvable :(
c'est bizarre comme erreur non ?
ma dll est toujours dans le system32 et elle fonctionne tres bien si j'enleve le memset...
J'ai pensé a un include manquant mais le compilo devrait me prevenir dans ce cas non ?
Aussi le message d'erreur de Vb devrait etre du genre "cant load library" ou "cant find entry point" mais "dll introuvable" je sais pas dutout ou il va chercher ca...

une idée peut etre ?

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
dimanche 13 mai 2007 à 20:49:12 | Re : dll pour vb6

BruNews

Administrateur CodeS-SourceS
hein....
Gros ce code ? sinon fais voir.

ciao...
BruNews, MVP VC++
dimanche 13 mai 2007 à 21:00:59 | Re : dll pour vb6

draluorg

non c'est juste quelques ptites fonctions pour apprendre un peu et pour tenter d'optimiser quelques fonctions de Vb


#define

_WIN32_WINNT 0x0501
#define _WIN32_IE 0x0501
#include <windows.h>

HINSTANCE thismod = 0;

#pragma

comment (linker, "/entry:myDllMain" )

__declspec

( naked ) int __stdcall myDllMain(HINSTANCE hdll, DWORD dwReason, LPVOID Reserved)

{

// DLL_PROCESS_DETACH = 0, DLL_PROCESS_ATTACH = 1

__asm {
mov eax, [esp+8] ; dwReason
mov edx, [esp+4] ; hdll
dec eax
//js short processDETACH
jne short mainRET
push edx
mov thismod, edx
call dword ptr DisableThreadLibraryCalls
//jmp short mainRET
//processDETACH:
mainRET:
mov eax, 1
ret 12
}

}

#ifdef __cplusplus
extern "C" {
#endif

/* FONCTIONS EXPORTEES ICI */

void

Div ( long * a , long b ) ;
long Increment ( long a , long llen ) ;
void Decrement ( long * a , long llen ) ;
long MovMem ( long a , long b , long c ) ;
void MakeBuff ( long * a , long llen ) ;

__declspec

( naked ) long Increment( long a, long b)
{
__asm {
mov eax, [esp+8]
add eax, [esp+4]
ret 8
}

}

void

Decrement ( long * a, long b)
{
*a -= b;
}

void

Div( long * a, long b)
{
*a /= b;
}

__declspec

( naked ) long MovMem( long a, long b, long c)

{

__asm {
push edi
push esi
mov edi,[esp+12]
mov esi,[esp+16]
mov ecx,[esp+20]
rep movsb
pop esi
pop edi
ret 12
}

}

void

MakeBuff ( long * a, long b)

{

  memset(a, 32, b);
//*a = *a / b;
}

#ifdef

__cplusplus
}
#endif

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
dimanche 13 mai 2007 à 21:24:25 | Re : dll pour vb6

BruNews

Administrateur CodeS-SourceS
Attends, je vais compiler et voir si j'ai le prob.

Pour info:
rep movsb, à bannir sur les processeurs modernes, trop lent.

memset, tu es certain que c'est ce que tu veux ??? En tout cas, faut éviter les routines CRT quand on fait un point d'entrée perso, c'est justement pour s'en passer.

ciao...
BruNews, MVP VC++
dimanche 13 mai 2007 à 21:33:42 | Re : dll pour vb6

draluorg

"rep movsb, à bannir sur les processeurs modernes, trop lent."
Eh merci pour l'info :) mais tu remplace par quoi alors ?

"memset, tu es certain que c'est ce que tu veux ??? "
eh bin ce serait pour creer un buffer en passant un StrPtr(MaString) depuis vb
j'imagine d'apres ta remarque que c'est pas la meilleur solution...

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...

1 2

Cette discussion est classée dans : long, vb6, dll, export, div


Répondre à ce message

Sujets en rapport avec ce message

Embarquer une dll dans un executable [ par MetalDwarf ] Voila je voudrais embarquer une dll dans un executable, c est a dire la mettre en data dans mon fichier source, et la reecrire sur le disque dur a l e Workspace et export de fonctions [ par varbool ] Salut,J'ai le makefile d'une application et comme je ne connais aucune méthode pour créer un espace de travail à partir d'un makefile j'ai du faire ca Appel dll VB6 à partir de C++ [ par stof35 ] Bonjour,Je dois réaliser l'intégration d'une DLL écrite en VB6 par un prestataire externe dans un projet C++. J'ai essayé par des moyens classiques ma problème de syntax d'appel pour une dll en vb6.0 [ par hightower ] Salut tout le monde!voila j'ai un problème, j'ai une dll qui a été faite pour gérer une carte d'E/S en VC++, et moi j'aimerai faire mon application en Problème d'interfacage d'une DLL écrite en C++ avec vba [ par pierrinot ] Bonjour, Je dois créer une DLL utilisable par un programme VBA. Je tombe sur un problème d'entête de fonctions. La DLL est bien compilée, mais lorsq Utiliser un tableau de double en retour d'une DLL pour VB6 [ par les french texans ] Bonjour, je vais essayer d'etre claire.J'ai un programme en VB6 (qui marche normalement) qui a un tableau de double :"Dim picture_array(0 To 310, 0 To returnourner un entier long long [ par dlamalice ] Bonjour,j'ai codé une dll toute bete et j'aimerai que cette dernière me retour un long long (64bit) statique.Mais quand je compile la ligne return ne DLL COM et SAFEARRAYS [ par wismerhill__ ] Bonjour, j' essai de trouver un moyen de remplir des arrays/matrices C++ par des arrays/matrices de string/UDT/double VBA, dans le but de faire des op portage d'ActiveX VB6.0 en C++ [ par systemsb ] Bonjour,    Actuellement en stage,je dois porter une dll ActiveX Vb6.0 en C++(Visual Studio 2005) et je ne sais même pas quel types de projet créer(je Intégration d'une DLL VB6 dans un projet CPP [ par guilleto ] Bonjour à toutes et tous,Je développe un projet en C++ et je dois utiliser une DLL réalisée en VB6 !Je connais le nom de la DLL ainsi que le nom de la


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales