Créer une library dynamique (.dll) [Résolu]

Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 13 févr. 2010 à 22:22 - Dernière réponse :
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 16 févr. 2010 à 17:24
Salut,

Est-il possible de compiler une library dynamique (.dll) multilangage ?
Possible en C ?

Merci,
Cordialement zestyr

La conerie est humaine
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 16 févr. 2010 à 14:23
3
Merci
Bin si tu veux faire comme la SDL et comme l'API windows, alors fait comme elles ! Ne fait pas du COM !

Sinon tu peux essayer de faire du COM, mais c'est particulièrement compliqué à faire en C sans apporter grand chose.

Une fois que tu as fait ta dll classique pour l'utiliser depuis du C# ou du VB.NET, is suffit d'utiliser PInvoke, comme je l'avais évoqué.

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_rt15
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
- 14 févr. 2010 à 10:31
0
Merci
Multilingue ou multilangages (mélange de C et d'autres langages) ?
---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 14 févr. 2010 à 10:57
0
Merci
Exploitable avec différent langages comme la SDL par exemple ou l'ApiWnds.

Est-ce possible en compilant qu'une fois ?


La conerie est humaine
Commenter la réponse de Zestyr
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
- 14 févr. 2010 à 17:36
0
Merci
Tu peux mettre à chaque fois les deux versions de la fonction avec un nom différent mais ce n'est pas très propre. Utilise plutôt deux DLLs séparées.
---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 14 févr. 2010 à 17:47
0
Merci
Et on peut pas par exemple:
Compiler en C et exploiter en jscript ?
Ou compiler en C# et exploiter en C ?


La conerie est humaine
Commenter la réponse de Zestyr
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 14 févr. 2010 à 18:38
0
Merci
Salut,

Il y a pas deux n à connerie ? Ou alors c'est un jeu de mot ?

La SDL et les API windows sont des bibliothèques, pas des langages.

On peut appeler une dll depuis du jscript si et seulement si elle est COM/ActiveX. On peut faire des dlls COM en C, en VB6... Mais ce n'est pas évident à réaliser en C. D'autre part, les navigateurs sont configurés pour refuser ce type de scénario pour des raisons de sécurité.

On ne peut pas appeler une dll C# depuis du C. Une dll C# (On parle plutôt d'assembly) est en langage intermédiaire, rien à voir avec le natif généré depuis le C. Par contre appeler une dll C depuis du .NET, c'est possible (Se documenter sur PInvoke).

Globalement, le plus portable pour une dll, c'est une dll exposant des fonctions avec la convention d'appel stdcall, et ne prenant en argument que des types simples. Faut se calquer sur l'API Windows en fait. En fait les dll de l'API windows sont directement utilisées ou utilisables dans de nombreux langages.

De cette manière, la dll est utilisable, en VB6 (Declare ...), VBA, VB.NET, Delphi, C# et j'en passe.
Commenter la réponse de cs_rt15
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 14 févr. 2010 à 19:05
0
Merci
Lu,

Il y a pas deux n à connerie ? Ou alors c'est un jeu de mot ?


Oui tu a raison 2nC'est surement un jeu de mots vaseux mais il me fais délirer. La connerie ne fait pas de mal est c'est bon d'avoir des potes pour te le rappeler !


Je sais pas vraiment ce qu'est une lib COM !
SDL serait COM alors ?
Aurais tu des tutos pour créer des lib COM ou des forum où ils en parlent ( tout ce qui me permettrais d'avoir plus d'infos ) ?

++


La connerie est humaine
Commenter la réponse de Zestyr
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 14 févr. 2010 à 20:21
0
Merci
Non non, à la base la SDL n'est pas COM que je sache. C'est une librairie C classique à la base. Des wrappers pour différents langages ont été écrits, mais je ne crois pas qu'il y en ait sous forme de lib COM.

La doc COM est ici.
Commenter la réponse de cs_rt15
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 14 févr. 2010 à 21:13
0
Merci
Merci pour le lien Evidemment msdn !

SDL est exploitable en jscript avec la lib SDL.dll !

C'est quoi des wrappers ?

++


La connerie est humaine
Commenter la réponse de Zestyr
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 15 févr. 2010 à 15:34
0
Merci
Bin dans mon texte, wrapper est un lien vers la définition de wrapper. Mais en deux mots, disons que ça revient à encapsuler une bibliothèque dans quelque chose de manière à modifier l'interface de cette bibliothèque.

Tu peux me montrer un exemple de jscript utilisant sdl.dll s'il te plait ?
Commenter la réponse de cs_rt15
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 15 févr. 2010 à 17:19
0
Merci
Commenter la réponse de Zestyr
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 15 févr. 2010 à 20:06
0
Merci
Re, escuse.
J'ai tester il y a quelque SDL avec du jscript interprété par msgPlus.
C'est pas prévu pour et c'est pas très stable !

var continuer = true;
var shl = new ActiveXObject("WScript.Shell");
var SDL = "../../"+MsgPlus.scriptFilesPath.replace(/([a-zA-Z])(:\\)/, "").replace(/(\\)/g, "/")+"/SDL.dll";
var event;
function OnEvent_Initialize(MessengerStart)
{	
}

function OnEvent_Uninitialize(MessengerExit)
{
continuer = false;
}

function loopEvent()
{
event;
var keystate;
Debug.trace("ok: "+(keystate = Interop.Call(SDL, "SDL_GetKeyState", 0)));

while (continuer)
    {


if(Debug.trace(Interop.Call(SDL, "SDL_PollEvent", event) != 0))
{
shl.popUp("oki");
}
}

function OnEvent_MenuClicked(Id, Location, OriginWnd)
{
if(Id == "start")
{
openWnd();
continuer = true;
}
if(Id == "stop")
{
continuer = false;
}
if(Id == "startEvent")
{
loopEvent();
}

}
function openWnd()
{
Debug.trace(Interop.call(SDL, "SDL_Init", 0x00000020)); // SDL_INIT_VIDEO = 0x00000020
Debug.trace(ecran Interop.call(SDL, "SDL_SetVideoMode", 350, 150, 32, 0x00000000)); // SDL_SWSURFACE 0x00000000
Debug.trace(Interop.call(SDL, "SDL_WM_SetCaption", "Seul al première lettre sera affiché", 0));
loopEvent();
Debug.trace(Interop.Call(SDL, "SDL_Quit"));
}


Mais ça n'a pas beaucoup d'intêret !!!

++



La connerie est humaine
Commenter la réponse de Zestyr
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 16 févr. 2010 à 09:58
0
Merci
Ah oups, désolé pour le lien...

Dans ton script ci-dessus, ce n'est pas une surcouche COM de la SDL qui est utilisé. Les fonctions de la dll classique sont directement appelées à l'aide de Interop.Call. Tu pourrais donc utiliser Interop.Call pour appeler n'importe quelle dll classique de windows.

Je ne connaissais pas du tout Interop.Call, et j'ai du mal à trouver des informations dessus. Ce script est utilisé dans un contexte particulier j'imagine ?
Commenter la réponse de cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
- 16 févr. 2010 à 10:04
0
Merci
C'est visiblement lié à messenger. Et ça permet donc effectivement d'appeler n'importe qu'elle dll avec une convention d'appelle stdcall.

Voilà de la doc où il y a un exemple d'appel à MessageBoxW de user32.

Donc encore une fois, les dlls appelable sont des dlls classiques (Pas COM).
Commenter la réponse de cs_rt15
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 16 févr. 2010 à 12:13
0
Merci
Salut,
il me semble que call est surtout pour exploiter l'apiWnds.


Moi ce que je voudrais faire c'est créer des lib qui pourrais faire un "lien" entre du C, du C# et de VB ! Donc ce qui faut c'est du COM ?

++

La conerie est humaine !
Commenter la réponse de Zestyr
Messages postés
467
Date d'inscription
mercredi 12 août 2009
Dernière intervention
17 octobre 2011
- 16 févr. 2010 à 17:24
0
Merci
Perfecto,
A vrai dire je suis sur un projet linux mais je voulais être fixer, Merci beaucoup


La connerie est humaine !
Commenter la réponse de Zestyr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.