Utilisation d'une dll c dans du code ASP.Net / probl�me avec les structures
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
Code:
1 2 3 4
| typedef struct PERSONNE{
int age;
int nbrEnfants;
}PERSONNE; |
- Le code permettant l'appel externe d'une fonction:
Code:
extern "C" __declspec(dllexport) int __stdcall getAge(PERSONNE p);
Dans le fichier cpp on trouve :
Code:
1 2 3 4
| int __stdcall getAge(PERSONNE p)
{
return p.age;
} |
Dans le projet ASP on trouve dans le home controler :
Code:
1 2
| [DllImport("Access_dll.dll", EntryPoint="getAge", CharSet=CharSet.Auto)]
public static extern int getAge([In, MarshalAs(UnmanagedType.LPStruct)] PERSONNE p); |
et dans le fonction index :
Code:
int age = getAge(???); // ??? car je ne vois pas comment récupérer ma structure PERSONNE pour l'instancier.
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.
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 :
Citation:
Impossible de trouver le point d'entr�e 'getAge' dans la DLL 'MyDll.dll'. //MyDll.dll �tant la dll contenant la fonction getAge.
class PERSONNE cr�� dans le projet ASP:
Code:
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 :)