Appel d'une DLL C# en Delphi

Signaler
Messages postés
5
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
12 avril 2007
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Salut tout le monde,

Voile, je cherche a lancer une DLL ecrite en C# dans un programme ecrit en delphi 6.
Je nage completement ...

Si quelqu'un a deja fais ca est-ce quil pourrais partager son savoir ca m'aiderai bocu!!!

Merci d'avance.

P.S: desole si ce poste a deja etais pose mais je n'est rien trouver de concret.

7 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
Bonjour,


Quelle convention d'appel ? Mais j'y pense, la dll en C# n'est pas
sensé contenir du code machine, mais du MSIL, donc les convention
d'appel... La dll est compilé avant d'être mappé ? Ce serait pas le
genre de la maison...


Tu as déjà essayé f0xi ?


Si on prend le cas des dlls COM, c'est déjà loin d'être simple, alors avec une dll .NET...


Un portage vers du Delphi.NET n'est pas envisageable ?
Messages postés
4199
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
28
une dll qu'elle soit ecrite en delphi, en c++ ou en klingon ça reste une dll ...

donc tu l'appel comme n'importe qu'elle dll.

Messages postés
5
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
12 avril 2007

Non le portage doit etre fait sous Delphi 6

Mais j'ai trouvé une solution
Il faut creer une dlls com sous c#, avec une fonction d'interface que l'on appel dans delphi de cette maniere

intfRef := CreateComObject(CLASS_SimpleDLL_) as IAddInterface;

attention les possibilités d'échanges sont tres limités, cad que les types utilisés dans le parametrage  ne correspondent pas forcement. je ne parle meme pas des pointeurs...

Merci de vos reponses
Messages postés
2
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007

Je profite de ce sujet pour vous poser une question qui si vous avez la solution me sortirais de la pannade.


J'ai une dll que l'on va appeler FaitLeCafe.dll qui m'a été fournie avec un exemple d'appel en C# :

...

using FaitLeCafe;

...

FaitLeCafe.FaitLeCafe mydll = new FaitLeCafe.FaitLeCafe();

mydll.FaitLeCafeEtApporte("A machin");

string resulta = mydll.ReadData.ToString();


Si je decode correctement :

Y a un namspace FaitLeCafe qui contiens un objet FaitLeCafe

ils declarent donc mydll comme etant un objet de type FaitLeCafe

puis invoquent son constructeur.


Par la suite est apellé la fonction FaitLeCafeEtApporte

L'objet mydll a une propriété contenant le résultat de FaitLeCafeEtApporte

De mon coté j'ai un serveur ecrit en delphi5 qui devrais utiliser cette dll.
Habituellement toutes les dll que j'ai utilisé ont des fonctions que j'importe et basta cosi...
La créer un objet a partir de la dll et utiliser ses méthodes je pèche....

Merci de vos réponses :-)
Messages postés
5
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
12 avril 2007

pourrais tu etre plus explicite sur ton souci?

Tu veux pouvoir utiliser ta DLL ecrite en c# dans un programme serveur ecrit en Delphi.

si c ca il faut que tu utilise des objets COM c le seul moyen que j'ai touvé pour ce cas la
Messages postés
2
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007

En effet je souhaite utiliser cette DLL dans mon serveur qui est ecrit en delphi5

L'exemple qui m'a été donné pour intégrer cette DLL est ecrit en C# ainsi que la DLL.
Pour utiliser des fonctions dans une DLL je ne connais que cette méthode (en delphi):

// declaration
type nomTypeObjet = object  end;
function FaitLeCafeEtApporte(Data : string):nomTypeObjet ;  external 'FaitLeCafe.dll';

// utilisation
var
  resultat :  nomTypeObjet;
begin
  resultat := FaitLeCafeEtApporte('A machin');
end;

La resultat est vide. Et pour cause on dirais que la DLL attends que j'appelle un constructeur d'objet puis que j'utilise une de ses méthodes et que par la suite je lise un de ses attributs pour obtenir le résultat.

Comment faire pour que je puisse appeler le constructeur de cet objet a partir de Delphi et que je puisse par la suite utiliser une de ses méthodes et que j'en lise un de ses attributs ?

Tu parle d'objet COM. Comment utiliser cela ?
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
Tu peux peut être faire comme si ta dll était COM avec cette outil :


http://msdn2.microsoft.com/fr-fr/library/tzat5yw6(VS.80).aspx