Windows-kernel32-Funktionen in Mono auf Linux
Habe ich diese sehr einfache ini-Klasse, die ich heruntergeladen habe von irgendwo eine Weile her, aber jetzt, dass ich mit mono hab ich, läuft in das Problem, dass es Import-Sachen von kernel32
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,
string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
Welche auf mono (in linux) gibt den Fehler DLLNotFoundException: kernel32
Gibt es eine Möglichkeit zu bekommen dies funktioniert mit mono? Vielleicht Betten Sie die ganze Sache in der Versammlung zur compile-Zeit (falls das überhaupt sinnvoll ist, ich weiß es nicht). Oder werde ich haben zu erstellen/zu finden, eine ini-Klasse, der nicht mit WinAPI? (Nini Federn in den Sinn).
Ich würde wirklich, wie es ist, wenn WinAPI-Sachen arbeiten konnte, mit Mono -, irgendwelche Gedanken?
- Gut, das ist nicht zur Arbeit zu gehen, natürlich. Sie benötigen zu bleiben Weg von diesen apis sowieso, Sie sind schrecklich teuer und nicht unterstützen konsistente string-Kodierung. Xml verwenden.
- Könnte es sein, dass Mono-und Kleinschreibung beachtet? Versuchen Sie, importieren Kernel32, mit einem Kapital K.
- Ich nehme Ihren Rat an und verschieben von xml für zukünftige Projekte, aber ich würde gerne wissen, ob es alle Weise um WinAPI Funktionen in Mono-unabhängig. Ich muss quick-fix einige persönliche-Anwendungen, die wirklich nicht 'verdienen' daran gearbeitet werden, lange genug, um loszuwerden, der WinAPI-Abhängigkeit. So dreckig, weit-aus-optimale Korrekturen sind willkommen. Wenn es unmöglich ist, dann bin ich nur Pech, aber ich würde gerne wissen, für sicher 😉
- Nur um zu überprüfen, man läuft Mono unter Windows, richtig? Mono bringt auch nicht die Win32-API mit, die es auf anderen Plattformen (Wein macht, aber das könnte ein heikles integration). Und wenn Sie auf Windows laufen, warum bist du mit Mono-statt der MS CLR?
- Nein, ich bin nicht mit mono unter windows, bei mir läuft es auf linux.. wahrscheinlich sollte ich erwähnt haben, dass -.-
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie schreiben die Funktionalität dieser Funktionen in native .NET auf Mono/Linux (es sei denn, Sie überzeugen können, Mono-und Wein schön zu spielen).
Wenn die INI-Dateien gesteuert werden, dann können Sie sich mit einfache Datei - /string-manipulation, aber dann sollten Sie vielleicht besser verschieben, um etwas ein bisschen mehr cross-Plattform sowieso.
Mono unterstützt C#P/Invoke, das ist, was erforderlich ist für die Ausführung von Win32-API-Funktionen. (Solange man läuft Mono unter Windows-die Tatsache, dass es nicht finden können
"kernel32"
werden, lässt mich vermuten, dass Sie es nicht sind.)Der Website pinvoke.net sammelt die notwendigen DllImport Unterschriften für die meisten Win32-API.
Hier ist, was es zu sagen hat über GetPrivateProfileString.
Dieser code war für mich der Verwendung von Mono-2.10.8 auf Windows 7:
Ändern
[DllImport("kernel32")]
in[DllImport("kernel32.dll")]
Alles wird anfangen zu arbeiten wie vorgesehen.