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

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

16 réponses

Répondre au sujet
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 16 févr. 2010 à 14:23
+3
Utile
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é.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_rt15
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 14 févr. 2010 à 10:31
0
Utile
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
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 14 févr. 2010 à 10:57
0
Utile
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
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 14 févr. 2010 à 17:36
0
Utile
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
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 14 févr. 2010 à 17:47
0
Utile
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
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 14 févr. 2010 à 18:38
0
Utile
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
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 14 févr. 2010 à 19:05
0
Utile
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
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 14 févr. 2010 à 20:21
0
Utile
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
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 14 févr. 2010 à 21:13
0
Utile
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
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 15 févr. 2010 à 15:34
0
Utile
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
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 15 févr. 2010 à 17:19
0
Utile
Lu, Wikipédia ne possède pas d'article avec ce nom !

La connerie est humaine
Commenter la réponse de Zestyr
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 15 févr. 2010 à 20:06
0
Utile
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
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 16 févr. 2010 à 09:58
0
Utile
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
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 16 févr. 2010 à 10:04
0
Utile
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
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 16 févr. 2010 à 12:13
0
Utile
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
Zestyr 467 Messages postés mercredi 12 août 2009Date d'inscription 17 octobre 2011 Dernière intervention - 16 févr. 2010 à 17:24
0
Utile
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.