Bonjour coll�gues d�veloppeurs,
Je suis en train de migrer l'interface d'une application C/C++ vers une technologie ASP.NET
Malheureusement je me retrouve confront� � un probl�me bloquant. J'aurais donc besoin de vos lanternes
Le contexte :
L'application est aujourd'hui fonctionnel en client lourd, et tourne avec des "Winforms". L'objectif et de transformer l'application en Dll(s) et d'utiliser ces Dlls dans un projet ASP.Net.
De cette facon, on r�utilise les fonctions existantes et on ne recr�� que le cot� graphique web.
Mon avancement :
Le cot� metier, c'est � dire les fonctions de calcule de l'application sont sous form de Dll, avec une prise en charge COM.
Pour effectuer des tests, seul quelques dlls ont �t� cr��es.
Une nouvelle solution sous visual studio 8 a �t� cr��. Celle-ci comprend :
- Un projet ASP.Net cr�er via l'assitant sur un model MVC.
- Un projet dll comprenant mon code g�n�rant ma dll (code c/c++ comprenand des header file, des definition de structures).
Dans le header du projet dll on trouve :
- La definition d'une structure PERSONNE
- Le code permettant l'appel externe d'une fonction:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 typedef struct PERSONNE{ int age; int nbrEnfants; }PERSONNE;
Dans le fichier cpp on trouve :
Code : S�lectionner tout - Visualiser dans une fen�tre � part extern "C" __declspec(dllexport) int __stdcall getAge(PERSONNE p);
Dans le projet ASP on trouve dans le home controler :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 int __stdcall getAge(PERSONNE p) { return p.age; }
et dans le fonction index :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 [DllImport("Access_dll.dll", EntryPoint="getAge", CharSet=CharSet.Auto)] public static extern int getAge([In, MarshalAs(UnmanagedType.LPStruct)] PERSONNE p);
La compilation me g�n�re le fichier dll, ajout� comme r�f�rence au projet ASP.net. Cette r�f�rence fait bien apparaitre la fonction getAge dans l'explorateur d'objet.
Code : S�lectionner tout - Visualiser dans une fen�tre � part int age = getAge(???); // ??? car je ne vois pas comment récupérer ma structure PERSONNE pour l'instancier.
Ce que je parvient � faire :
L'appel de fonction pr�sent dans ma dll qui prend en param�tre des parametres de type courant (comme int, string, ...) fonctionne sans probl�me. J'affiche sur la page web le r�sultat d'une fonction pr�sente dans ma dll. Pour faire ce teste, je redefinit ma fonction getAge avec un entier en param�tre, et je lui demande de me retourner cette entier. Dans ce cas tout ce passe correctement
Le probl�me :
Je ne sais pas comment appeller une fonction avec un parametre autre qu'un type simple.
En effet, cela semble logique, je ne peux pas "importer" de header en asp.net, et donc le projet asp ne connait pas la structure personne.
Solution envisag�e :
J'ai bien essayer de cr�er un class PERSONNE avec les m�mes attributs que ceux de la structure mais l'appel � la fonction echoue. L'objet de type PERSONNE et la structure PERSONNE ne sont pas reconnu comme �tant la m�me, se qui peut �tre comprehensible.
Erreur retourn�e :class PERSONNE cr�� dans le projet ASP:Impossible de trouver le point d'entr�e 'getAge' dans la DLL 'MyDll.dll'. //MyDll.dll �tant la dll contenant la fonction getAge.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 [StructLayout(LayoutKind.Sequential)] public class PERSONNE { public int age; public int nbrEnfants; }
Quelqu'un aurait-il une piste ?
Me suis-je plant� quelque part dans mon raisonnement ?
Suis-je assez clair ? ^^
J'espere que vous pourrez m'�clairer. Quoi qu'il en soit merci de m'avoir lu![]()
Partager