Bonjour à tous,

Je viens vers vous car j'ai cherché toute la journée la solution à mon problème mais je n'y arrive toujours pas.
Comme l'intitulé l'indique je cherche à utiliser une méthode d'une dll c++ dans un programme C#.

La difficulté c'est que c'est une méthode d'un objet quelconque, et je ne sais pas comment l'implémenter du côté programme C#.

Exemple:
Nom de ma dll : maDLL.dll

Fichier monObjet.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
bool MonObjet::test()
{
	bool mytest = true;
	return mytest;
}

J'ai essayé ceci côté programme c#:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
[DllImport("maDLL.dll", EntryPoint = "#1234", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.ThisCall)]
 public static extern bool test();
 
 static void Main(string[] args)
{
Console.WriteLine("le booleen est: " + test());
}
Dans DLL export viewer l'ordinal #1234 correspond à la fonction:
public: bool __cdecl pla::MonObjet::test(void) __ptr64

Mais cela ne marche pas, un message d'erreur s'affiche dans la console C#:
<<Unhandled Exception: System.Runtime.InteropServices.MarshalDirectiveException: I
nvalid PInvoke calling convention. Thiscall requires that the first parameter is
present and can be enregistered.>>

Merci pour votre aide svp.