Ich habe Capella 10 installiert und jetzt läuft mein Plugin nicht mehr. (Ein Fall für Paul) Dies ist der Text meiner Python-Datei (mit Pauls Hilfe erstellt): import tempfile import ctypes if activeScore(): activeScore().registerUndo('ChangeView') tempFile = tempfile.mktemp('.capx') activeScore().write(tempFile) a = ctypes.cdll.LoadLibrary('C:\Users\Henning\Documents\capella\scripts\ChangeView.dll') a.ChangeView(tempFile) activeScore().read(tempFile) os.remove(tempFile)
Die Fehlermeldung in der angehängten Datei (man kann in Capella den Text der Fehlermeldung leider nicht kopieren). Das eizige, was mir auffällt ist, dass bei mir Capella unter "Programme" angelegt wurde und nicht unter "Program Files". Aber das sollte eigentlich nichts ausmachen, oder? Ich habe Windows 11 Home installiert.
HenningF
hat folgende Bilder an diesen Beitrag angehängt
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden!
Capella_Fehler.jpg
noch ein Tip zum Kopieren der Fehlermeldung: das scheint eine "Standard-Windows-MessageBox" zu sein. Wenn sie angezeigt wird (und den Fokus hat) einfach Strg+C dann ist der Text in der Zwischenablage... Viele Grüße DAniel
ja, das kann ich als Entwickler bestätigen: eine 64bit-Anwendung kann keine 32bit-DLLs laden.... Evtl. kann man aber beeinflussen, welches Python (32/64bit) aufgerufen wird, denn Python lädt letztendlich die DLL
Zitat von HenningF im Beitrag #1 Dies ist der Text meiner Python-Datei (mit Pauls Hilfe erstellt):
import tempfile import ctypes if activeScore(): activeScore().registerUndo('ChangeView') tempFile = tempfile.mktemp('.capx') activeScore().write(tempFile) a = ctypes.cdll.LoadLibrary('C:\Users\Henning\Documents\capella\scripts\ChangeView.dll') a.ChangeView(tempFile) activeScore().read(tempFile) os.remove(tempFile)
Das bestätigt mich wieder in meiner Abneigung gegen Python. Geht die Formatierung verloren, ist das Script absolut sinnfrei. Nur um das mal loszuwerden
Musik: Notensatz&Musizieren&Recording@Jazz,Rock,Chor@Bass,Gitarre,Gesang. Soft: Aktuell : PriMusPublisher, PdfToMusic, CapalleScan8, Transcribe, Ardour (+MuseScore, Audacity, u.v.a.m.) Früher: GuitarPro(1…6), Capella(1…6), TuxGuitar, CakeWalk, … Prog: Lua, C++, Perl, Bash, ... HW: i7-8086K, 32GB-Ram, 2x1TB SSD + 2x4TB HD BS: xubuntu22.04LTS (Früher auch W7x64, W10 hat bei mir Hausverbot) Sound: Allen &Heath QU16, Focusrite Scarlett 2i2
Ich habe die DLL in C# geschrieben und mit DLLExport.bat bearbeitet, so dass die Funktionen richtig exportiert werden. Das hat mit verschiedenen DLLs immer funktioniert. Es kann sein, dass die DLL nicht gefunden wurde, da ich meine Plugins in einem separaten Verzeichnis gespeichert hatte. Ich habe die DLL neu als 64 bit Klassenbibliothek erstellt. Jetzt geht es auch nicht, aber die letzte Zeile der Fehlermeldung ändert sich: --------------------------- Fehler in Plugin --------------------------- Traceback (most recent call last): File "<string>", line 8, in <module> File "C:/Program Files/capella-software/capella Abo/bin/Python27/Lib\ctypes\__init__.py", line 440, in LoadLibrary return self._dlltype(name) File "C:/Program Files/capella-software/capella Abo/bin/Python27/Lib\ctypes\__init__.py", line 362, in __init__ self._handle = _dlopen(self._name, mode) WindowsError: [Error 193] %1 ist keine zulässige Win32-Anwendung
Ich kann mit dem Fehler nichts anfangen.
Vielleicht sollte ich auf Capella 9 zurückgehen, falls das möglich ist.
kannst Du mal checken, ob das Python27. das mit Capella dort mitgliefert ist 32 oder 64 bit ist? Und vielleicht ist es zum testen/Debuggen auch einfacher die DLL erstmal direkt in Python ohne den Umweg über Cappella zu laden: dann hast Du einen Prompt und kannst einfacher checken, was schief geht. Du kannst mir auch gerne mal Deine DLL schicken, dann kann ich versuchen sie in Python 32bit und Pyhton 64bit direkt zu laden... Gruss Daniel
Vorweg: ich habe keine Ahnung von Python (komme von Fortran IV, C, C++ und jetzt C#). Ich habe versucht, Python27.exe durch Doppelklick zu starten. Das hat nicht funktioniert, weil Python27.dll nicht gefunden wurde. Ich habe die dll aus bin kopiert. Danach startet es und es kommt diese Zeile.
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Ich habe alles mögliche versucht, auch andere Verzeichnisse wegen Leerzeichen im Pfadnahmen. Es kommt mal die Fehlermeldung, dass das Modul nicht gefunden wird, mal, dass es keine gültige Win32-Anwendung ist. Ich habe meine Dll (32 bit Version) angehängt.
HenningF
hat folgende Dateien an diesen Beitrag angehängt
Aufgrund eingeschränkter Benutzerrechte werden nur die Namen der Dateianhänge angezeigt Jetzt anmelden!
Zitat von HenningF im Beitrag #7Ich habe die DLL in C# geschrieben und mit DLLExport.bat bearbeitet, so dass die Funktionen richtig exportiert werden. Das hat mit verschiedenen DLLs immer funktioniert.
Hmmm. Wenn du den Quelltext hast, wäre es vielleicht sinnvoll, den Code nach Python zu portieren ¹), um solchen Problemen ein für allemal aus dem Weg zu gehen? Ich meine ja nur.
¹) Angeblich soll Chat-GPT so etwas "mal eben" erledigen. Zumindest könnte es einen Anfang liefern.
Musik: Notensatz&Musizieren&Recording@Jazz,Rock,Chor@Bass,Gitarre,Gesang. Soft: Aktuell : PriMusPublisher, PdfToMusic, CapalleScan8, Transcribe, Ardour (+MuseScore, Audacity, u.v.a.m.) Früher: GuitarPro(1…6), Capella(1…6), TuxGuitar, CakeWalk, … Prog: Lua, C++, Perl, Bash, ... HW: i7-8086K, 32GB-Ram, 2x1TB SSD + 2x4TB HD BS: xubuntu22.04LTS (Früher auch W7x64, W10 hat bei mir Hausverbot) Sound: Allen &Heath QU16, Focusrite Scarlett 2i2
Wenn sich das jemand zumuten will, kann er den Quellcode gern von mir bekommen (ca. 350 Zeilen). Ich verwende viele LINQ-Funktionen. In neueren Python-Versionen gibt es ein Pendant, ob das aber bereits in Python27 enthalten ist, weiß ich nicht. Wenn nicht, könnte es mühsam sein. Das beste wäre, wenn es einfach möglich wäre, Capella mit Python3.7 oder höher zu betreiben, denn es gibt es in Python mit Python.net eine einfache Schnittstelle.
Gut zu hören, dass es wieder geht - und wie erwartet müssen Python und die DLL zusammenpassen, was 32/64 bit angeht.... Portierung nach Python wäre sicher sinnvoll. Was macht Deine DLL denn eigentlich?
Das Plugins schaltet bei transponierenden Instrumenten zwischen klingender und notierter Form um. Für Nicht-Profis ist das sehr nützlich. Ich habe hier etwas holprig beschrieben. https://hflessner.de/Noten/Home/Index/1
Zitat von HenningF im Beitrag #14Das Plugins schaltet bei transponierenden Instrumenten zwischen klingender und notierter Form um. Für Nicht-Profis ist das sehr nützlich.
Nicht nur für Nicht-Profis!
Viele Grüße vom ebenfalls saxophonspielenden Namensvetter
Dr. T's Copyist (1991), capella (1992 bis 2000) Sibelius (aktuelle Version, seit 2000), MuseScore 4 (gelegentlich), Windows 10 (64 bit)