Mélanger code managé et non managé

fred_82 Messages postés 11 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 19 avril 2008 - 19 avril 2008 à 15:32
fred_82 Messages postés 11 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 19 avril 2008 - 19 avril 2008 à 20:01
Bonjour,

Je souhaiterais mélangé du code managé et du code non managé mais je n'y arrive pas.
pour avoir un classe non managé, il suffit pourtant de créer une classe de cette façon
class X{
...
}
mais le probleme vient lorsque que je veux utiliser des fonctions de l'API windows, car le compilateur me dit que les fonctions n'éxiste pas.

j'ai donc utiliser DllImportAttribute, cela fonctionne mais pour la fonction capDriverConnect, je ne sais pas dans quel dll elle se trouve.

Donc y'a t'il un moyen d'utilisé les fonctions de l'API windows dans du code C++/CLI non managé sans DllImportAttribute sinon comment faire pour savoir dans quel dll se trouve capDriverConnect
 

Merci

4 réponses

gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
19 avril 2008 à 17:37
capDriverConnect est une macro et non une fonction

#define capDriverConnect(hwnd, i) ((BOOL)AVICapSM(hwnd, WM_CAP_DRIVER_CONNECT, (WPARAM)(i), 0L))
#define AVICapSM(hwnd,m,w,l) ( (IsWindow(hwnd)) ? ::SendMessage(hwnd,m,w,l) : 0)

donc ta fonction peux fonctionner en fesant qu'un sendmessage
0
fred_82 Messages postés 11 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 19 avril 2008
19 avril 2008 à 18:11
J'ai fait ce que tu m'as dit mais le probleme est que WM_CAP_DRIVER_CONNECT n'est pas rconnu.
Voici mon Code

#include






<windows.h>

#include






<Vfw.h>

#include






<stdio.h>

#include






<stdlib.h>

#include






"stdafx.h"

#include






"WebCam.h"

using






namespace
System::Runtime::InteropServices;


//Vfw32.dll




[DllImportAttribute(




"avicap32.dll"
,CharSet=CharSet::Auto)]


extern






"C"
HWND capCreateCaptureWindow(LPCSTR lpszWindowName,

DWORD dwStyle,


int
x,


int
y,


int
nWidth,


int
nHeight, HWND hWnd,


int
nID );



/*[DllImportAttribute("AVICap.dll",CharSet=CharSet::Auto)]


extern "C" BOOL capDriverConnect(


HWND,


unsigned char


);*/




void



CWebCam::Connect(){


// Connexion à la web cam

hWnd_WC = capCreateCaptureWindow(




"handle"
, WS_CHILD | WS_VISIBLE,CAM_MARGE, CAM_MARGE, CAM_WIDTH, CAM_HEIGHT, hWnd, 1) ;


// Vérifie la connection






if
(!SendMessage(hWnd,WM_CAP_DRIVER_CONNECT,CAM_WIDTH,CAM_HEIGHT))


//if(!capDriverConnect(hWnd_WC,0))

exit(0);







// trouve le Device Context






//hDC_WC=GetDC(hWnd_WC);

}

Mes options de compilation sont \clr

Qu'est ce que je fais de mal?
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
19 avril 2008 à 19:30
#define WM_CAP_DRIVER_CONNECT           (WM_CAP_START+  10)
WM_CAP_START =     WM_USER                 = 0x0400

je sais pas pourquoi qu'il n'est pas reconnu

mais je ne fai jamais de code manager en esperant que tu reussises
0
fred_82 Messages postés 11 Date d'inscription dimanche 2 octobre 2005 Statut Membre Dernière intervention 19 avril 2008
19 avril 2008 à 20:01
non aucun moyen de faire fonctionner ca!
0