begin process at 2010 02 10 03:00:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.NET

 > PINVOKE OU COMMENT INVOQUER UNE DLL 'C' À PARTIR DE C# .NET

PINVOKE OU COMMENT INVOQUER UNE DLL 'C' À PARTIR DE C# .NET


 Information sur la source

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :.NET Source .NET ( DotNet ) Classé sous :pinvoke, dll Niveau :Initié Date de création :08/04/2003 Date de mise à jour :08/04/2003 18:28:07 Vu :11 904

Auteur : vieuxLion

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Plusieurs questions sur le forum concernent ce problème.
Voici la solution à base de la technologie PInvoke.
Il s'agit simplement de fournir une fonction 'stub' dont le prototype seul sera dans C#, l'implémentation sera dans une DLL 'C' .

Le but est de BIEN faire la correspondance entre chacun des deux types de paramètres (C d'une part et C# d'autre part) ... sous peine de plantage


Source

  • L'exemple suivant permet de déplacer (et retailler une fenêtre de votre application favorite ... qui n'a peut-être rien de .NET) à partir d'une fenêtre WinForm
  • Le projet à été développé avec la Version 1.1 et n'est pas compatible avec la Version 1, je ne l'ai donc pas livré
  • Ceci dit, rien de plus simple.
  • Faire un simple projet WinForm dont le look figure dans le .JPG
  • Ajouter les directives suivantes
  • using System.Runtime.InteropServices;//pour PInvoke (DllImport)
  • using System.Threading;//pour le Sleep
  • Ajouter les méthodes utilisées
  • [DllImport("user32.dll", CharSet=CharSet.Auto)]
  • public static extern int FindWindow (string lpClassName, string lpWindowName);
  • [DllImport("user32.dll", CharSet=CharSet.Auto)]
  • public static extern int FlashWindow (int hwnd, int bInvert);
  • [DllImport("user32.dll", CharSet=CharSet.Auto)]
  • public static extern int MoveWindow (int hwnd, int x, int y, int width, int height, int repaint);
  • Ajouter dans la classe , le Handler sur bouton
  • private void cmdFlash_Click(object sender, System.EventArgs e)
  • {
  • int hwnd = FindWindow(null, txtFenetre.Text);
  • lblHwnd.Text = "hwnd='"+ hwnd.ToString() + "'";
  • if (hwnd==0) return;
  • MoveWindow(hwnd, 0,0,300,300,1);
  • Thread.Sleep(1000);
  • FlashWindow(hwnd, 0);
  • }
  • C'est Tout !
  • Si votre DLL est autre qu'une DLL Système, soyez sûr qu'elle soit bien placée pour être retrouvée par Windows...mais ça ce n'est plus de l'Interop mais du classique !
L'exemple suivant permet de déplacer (et retailler une fenêtre de votre application favorite ... qui n'a peut-être rien de .NET) à partir d'une fenêtre WinForm
Le projet à été développé avec la Version 1.1 et n'est pas compatible avec la Version 1, je ne l'ai donc pas livré
Ceci dit, rien de plus simple.

Faire un simple projet WinForm dont le look figure dans le .JPG
Ajouter les directives suivantes
using System.Runtime.InteropServices;//pour PInvoke (DllImport) 
using System.Threading;//pour le Sleep

Ajouter les méthodes utilisées
[DllImport("user32.dll", CharSet=CharSet.Auto)] 
public static extern int FindWindow (string lpClassName, string lpWindowName); 

[DllImport("user32.dll", CharSet=CharSet.Auto)] 
public static extern int FlashWindow (int hwnd, int bInvert); 

[DllImport("user32.dll", CharSet=CharSet.Auto)] 
public static extern int MoveWindow (int hwnd, int x, int y, int width, int height, int repaint); 

Ajouter dans la classe , le Handler sur bouton
private void cmdFlash_Click(object sender, System.EventArgs e)
{
	int hwnd = FindWindow(null, txtFenetre.Text); 
	lblHwnd.Text = "hwnd='"+ hwnd.ToString() + "'";
	if (hwnd==0) return;
	MoveWindow(hwnd, 0,0,300,300,1);
	Thread.Sleep(1000);			
	FlashWindow(hwnd, 0);
}

C'est Tout !
Si votre DLL est autre qu'une DLL Système, soyez sûr qu'elle soit bien placée pour être retrouvée par Windows...mais ça ce n'est plus de l'Interop mais du classique !



 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE TAQUIN (POUR PDA)
Source avec Zip Source avec une capture Source .NET (Dotnet) ECRIRE EN COULEUR SUR LA CONSOLE
Source avec Zip Source avec une capture Source .NET (Dotnet) UTILISER LES 3 TECHNIQUES DE SÉRIALISATION DOTNET ET "VOIR" ...
Source avec Zip Source avec une capture Source .NET (Dotnet) LIRE LE CONTENU DE CONTRÔLES TEXTBOX, RICHEDIT,... D'AUTRES ...
Source avec Zip Source .NET (Dotnet) TRAVAIL SUR LES BASES DE DONNÉES, LES DATASETS ET LES FICHIE...

 Sources de la même categorie

Source avec Zip CHAT SERVER-CLIENT par abderrahmenbilog
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMULATION DE CONSOLE POUR WINDOWS MOBILE par originalcompo
Source avec Zip Source .NET (Dotnet) BASE DE DONNÉES EN XML par DanMor498
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMPLECONV - APPLICATION DE CONVERSION MONÉTAIRE AVEC TAUX E... par Jeffrey_
Source avec Zip Source .NET (Dotnet) TRAITEUR D'IMAGE (MINI) par ycyril

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) MESSAGES PERSOS MSN par XelectroX
Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source avec une capture Source .NET (Dotnet) INJECTER UNE DLL DANS UN PROCESSUS par Misugii
Source avec Zip Source .NET (Dotnet) [XNA 1.0 REFRESH] GESTION PAR GAMESTATE par ricklekebekoi
Source avec Zip Source .NET (Dotnet) HOOK CLAVIER par damned3

Commentaires et avis

Commentaire de typhoonx le 03/03/2004 13:43:27

Bonjour, j'ai essyé d'adapter votre code mais je n'ai pas réussi...
Je débute en c# et j'ai crée une dll en c ayant une fonction de multiplication et une autre d'addition (pour faire un exemple simple...).
Je voudrais à présent ouvrir la dll sous c# et utiliser mes deux fonctions... A l'aide !!!


Merci d'avance

Commentaire de vieuxLion le 04/03/2004 10:17:27

bonjour,
le problème vient peut-être du code C ...
en voici un exemple : fichier Oper.C
#include <windows.h>
__declspec(dllexport) int Addition(int x, int y)
{return x+y;}
__declspec(dllexport) int Multiplication(int x, int y)
{return x*y;}

... ou du programme C# qui utilise la DLL produite :
en tête de fichier :
using System.Runtime.InteropServices;//pour PInvoke (DllImport)

dans la classe utilisatrice :
[DllImport("testPInvoke.dll", CharSet=CharSet.Auto)]
  public static extern int Addition (int x, int y);
[DllImport("testPInvoke.dll", CharSet=CharSet.Auto)]
  public static extern int Multiplication (int x, int y);

Une fonction utilisatrice bouton : un label RES et des TextBox X et Y
private void btnAddition_Click(object sender, System.EventArgs e)
{RES.Text = Addition(Convert.ToInt32(X.Text),Convert.ToInt32(Y.Text)).ToString();
}

Reste à bien copier la DLL à côté de l'exe client.
bon courage

Commentaire de audklie le 10/05/2007 15:26:27

et ou copies tu la DLL coté client? dans \Windows ?
pour moi il ne trouve pas la dll .
et mes fonctions sont déclarées dans un bloc extern "C" {}
et non avec __declspec(dllexport)
3 ans après , une solution peut être? lol je tente tjrs... :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

dll... help... [ par kmizol95 ] j'ai un chti probleme... avec les dll... je sais pas comment faire pour en créée une en C#... qu'est ce qu'on peut ecrire dedans comment la déclarée d problème avec dll [ par pipicaca ] Bonjour!Voila je dois faire une application en C# utilisant des dll écrites en C. Les fonctions de ces dll ont en paramètres d'entrée/sortie des struc ?Gros problème avec dll [ par pipicaca ] Bonsoir,Voila je dois utiliser une dll écrite en C dans un programme écrit en C#. COmment faire??? Les fonctions contenues dans la dll et que je dois .lib et .net [ par Schad ] J'ai récupéré des dll que je dois incorporer dans un programme que je développe actuellement. Avec ces dll est fourni un exemple Visual C++ 6 qui poss DLL necessaires??? [ par temp456026 ] Bonjour,je viens de compiler et d'excuter un programme sous visual .net, sur ma machine il marche, mais des que j'essai d'executer l'exe sur une machi Acces aux éléments ajoutés [ par Online ] Re-BonjourVoila, cette fois ci, j'ai joins à mon programme 2 éléments ( une application et une DLL mais je ne sais pas comment y faire appel.La questi exe c# sans framework.net ? [ par KaViDee ] Je voulais savoir si il était possible de lancer une application compilée en c#.net sans avoir la framework.net d'installée sur son ordinateur, qu'on DirListBox [ par temp456026 ] Bonjour...voila je suis en train de developper une application sous visual.net en C# (sous XP)....dans mon Form il y a une DirListBox, des que je veut Connexion à une bd, manque une dll ! [ par gouin ] Auriez-vous l'amabilité de me dire ou je peux trouver cette dll : system.data.oledb.dll qui est légèrement indispensable et qui très étonnament n'est DLL et Services Web [ par rafraf ] Salut à tous ! J'ai un petit pb avec les DLL en code non managé, en mode Service Web, J'essaye de faire appel à une DLL dans un service web, j


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 7,769 sec (4)

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