Créer une library dynamique (.dll)

Résolu
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011 - 13 févr. 2010 à 22:22
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre 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

16 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
16 févr. 2010 à 14:23
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é.
3
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 févr. 2010 à 10:31
Multilingue ou multilangages (mélange de C et d'autres langages) ?
---
VB.NET is good ... VB6 is better
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
14 févr. 2010 à 10:57
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
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 févr. 2010 à 17:36
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
14 févr. 2010 à 17:47
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
14 févr. 2010 à 18:38
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.
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
14 févr. 2010 à 19:05
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
14 févr. 2010 à 20:21
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.
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
14 févr. 2010 à 21:13
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 févr. 2010 à 15:34
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 ?
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
15 févr. 2010 à 17:19
Lu, Wikipédia ne possède pas d'article avec ce nom !

La connerie est humaine
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
15 févr. 2010 à 20:06
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
16 févr. 2010 à 09:58
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 ?
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
16 févr. 2010 à 10:04
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).
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
16 févr. 2010 à 12:13
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 !
0
Zestyr Messages postés 466 Date d'inscription mercredi 12 août 2009 Statut Membre Dernière intervention 17 octobre 2011
16 févr. 2010 à 17:24
Perfecto,
A vrai dire je suis sur un projet linux mais je voulais être fixer, Merci beaucoup


La connerie est humaine !
0