dem Versuch, eine DllImport auf der folgenden Alsa Funktion aufrufen (vom documentation:P/Invoke EntryPointNotFoundException beim Versuch, pointer Behälter zuzuteilen
#define snd_seq_client_info_alloca(ptr) __snd_alloca(ptr, snd_seq_client_info)
einen auf Stapel snd_seq_client_info_t Behälter zuzuteilen
Hier ist eine Implementierung, die ich in C++ beim Lesen des Codes von application ähnlich zu dem, was ich in Mono erreichen möchte:
snd_seq_client_info_t* cinfo;
snd_seq_client_info_alloca(&cinfo);
Und hier ist, was ich habe, so weit, aber es funktioniert nicht:
[DllImport(libasound.so.2)]
private static extern void snd_seq_client_info_alloca(out IntPtr ptr);
internal static void MyFunction()
{
IntPtr clientInfo = IntPtr.Zero;
snd_seq_client_info_alloca(out clientInfo);
// and then some more ...
}
Aber ich bekomme die folgende Ausnahme:
System.EntryPointNotFoundException: snd_seq_client_info_alloca
at (wrapper managed-to-native)
MonoMultiJack.ConnectionWrapper.Alsa.LibAsoundWrapper:snd_seq_client_info_alloca (intptr&)
'EntryPointNotFoundException' und' # define'. Oh, manchmal übersieht man einfach das Offensichtliche. Vielen Dank. Zumindest kompiliert es jetzt, ich muss nur den Bibliothekscode nach der Größe des zu reservierenden Speichers durchsuchen. – Residuum
Wenn Sie eigentlichalloc von C# stacken möchten, können Sie auch das Schlüsselwort stackalloc verwenden: int * block = stackalloc int [100]; –