J'ai 2 composants:
- Application .Net Core fonctionnant sous Ubuntu OS.
- C++ bibliothèque partagée (.so)Call (C#) Méthode .NET Core à partir de C++
Maintenant, je veux composant C++ pour pouvoir appeler la méthode .Net de base, soit l'interface passe au composant C++ qui utilisera cette interface pour la mise en oeuvre de la méthode ou méthode de rappel qui passe comme paramètre au composant C++.
exemple de haut niveau ce que je suis en train de réaliser:
composant C#:
public interface IDevice
{
void OnDataAvailable(string data);
}
public class Device: IDevice
{
[DllImport("sampleCPPLibrary.so")]
private static extern int SetReceiver(IDevice receiver);
public void OnDataAvailable(string data)
{
Console.WriteLine(data);
}
public void Initialize()
{
SetReceiver(IDevice(this))
}
}
composant C++:
extern "C" {
void SetReceiver(IReceiver * receiver)
{
receiver->OnDataAvailable(10);
}
}
Fondamentalement, ce que je suis en train de faire est juste pour passer une sorte de "callback" au composant C++ et appelle ce "callback" quand un événement se produit dans un composant C++.
Je doute que vous pouvez le faire avec l'interface (parce que l'interface signifie avoir un objet qui l'implémente). Je ne suis pas beaucoup dans .Net Core, mais vérifiez si ['Marshal.GetDelegateForFunctionPointer'] (https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getdelegateforfunctionpointer?view = netframework-4.7.1 # System_Runtime_InteropServices_Marshal_GetDelegateForFunctionPointer_System_IntPtr_System_Type_) est disponible. Vous pouvez essayer de l'utiliser pour appeler le rappel de style C. –