Я пытаюсь реализовать сценарии 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 откод, использующий его, будет высоко оценен.