Mono Embedded: ссылка на .dll с внутренними вызовами? - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь реализовать сценарии C # через Mono для проекта C ++.

Мне удалось заставить работать внутренние вызовы, но только если они находятся в одном файле, например:

using System;
using System.Windows.Forms;
using System.Runtime.CompilerServices;

public class Debug
{
    [MethodImplAttribute(MethodImplOptions.InternalCall)]
    public static extern void Log(string logMessage);
}

public class Dog
{
    static public void Type()
    {
        Console.WriteLine("a Dog!");
    }
    public int Bark()
    {
        MessageBox.Show("Calling Debug.Log!");

        Debug.Log("Debug.Log from C#!");

        return 66;
    }
    public void Awake()
    {

    }
    public void Start()
    {

    }
    public void Update()
    {
        Debug.Log("Bark!");
    }
}

Однако моей конечной целью является возможность скомпилировать это при обращении к другому .dll, который объявил этот класс Debug, и при этом иметь возможность вызывать неуправляемую функцию.Я попробовал простой способ компиляции кода отладки отдельно, например:

using System.Runtime.CompilerServices;

public class Debug
{
    [MethodImplAttribute(MethodImplOptions.InternalCall)]
    public static extern void Log(string logMessage);
}

, оставляя свой Dog.cs как так:

using System;
using System.Windows.Forms;

public class Dog
{
    static public void Type()
    {
        Console.WriteLine("a Dog!");
    }
    public int Bark()
    {
        MessageBox.Show("Calling Debug.Log!");

        Debug.Log("Debug.Log from C#!");

        return 66;
    }
    public void Awake()
    {

    }
    public void Start()
    {

    }
    public void Update()
    {
        Debug.Log("Bark!");
    }
}

, а затем включив полученный DLL вкоманда mcs как таковая: mcs Dog.cs -target:library --stacktrace -r:System.Windows.Forms.dll -r:Debug.dll

Это компилирует код .cs, но вызов метода Debug.Log приводит к сбою моей программы.

Любые советы о том, как работать с отделением объявления InternalCall откод, использующий его, будет высоко оценен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...