booth hat geschrieben:1. Ich brauche eine dll (geht nicht anders). Zum testen tuts aber ein kleines Programm.exe. Die dll stellt eine Funktion zur Verfuegung, die als Parameter ein 2d Array hat. Damit ist das Ganze nur als Embedding zu machen, oder?
Nein, das ist in sich widersprüchlich: Wenn Du eine dll (oder ein shared object (.so) unter Linux) willst, die eine Funktion zur Verfügung stellt, die Du in Python importieren kannst, dann ist das nicht embedding, sondern extending - und zwar von Python. Mit embedding bezeichnet man das "Einbauen" von Python in ein anderes (C/C++)-Programm. Ergo brauchst Du auch kein Executable, sondern nur die dll, deren Funktion Du importierst.
booth hat geschrieben:2. An die dll (oder fest in der main() definiert) uebergebe ich einen String, der an ein Python-Skript uebergeben wird zwecks regular expressions und numpy
Wieso das? Wieso ein String, wenn es ein numpy array sein soll?
booth hat geschrieben:3. Das Skript wertet den String aus und gibt mir ein numpy-Array zurueck.
Wie auch immer, wenn Du einen String an eine Funktion in C++ übergeben willst und ein numpy-Array zurückkommen soll, dann mußt Du letzters erst erzeugen. Das ginge z. B. mit
PyArray_NewFromDescr oder PyArray_New und Konsorten. Aber Du gibst ja gar nichts zurück - außer einem Integer.
booth hat geschrieben:4. Ich schreibe das numpy-Array in das C++-Array (Eingabeparameter der dll-Funktion).
Also da blicke ich nicht so ganz durch:
Du deklarierst patternString und steckst es in eine Funktion, die einen Parameter akzeptiert, aber diesen nicht, sondern - wenn man von dem Fehler (s.u.) absieht - ein anderes array zurückgibt. (Tipp: Mit "inSdump" passiert gar nichts.)
In dem Python-Skript erzeugst Du kein Array, es sei denn Du hast numpy.ndarray umgeschrieben
. Bei mir erzeugt
einen Traceback:
Code: Alles auswählen
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: data type not understood
Warum zeigt Dir
Wenn Du tatsächlich ein 2d-array erzeugen willst, dann z. B. so:
So, jetzt kannst Du entweder die Pythonfunktion entsprechend ändern, damit Du tatsächlich mit den Werten so arbeitest, wie Du es wünscht. Oder, falls Dein Wunsch ist von Python aus auf kompilierte Funktionen zurückgreifen zu können, solltest Du im C-Code tatsächlich auch Funktionen deklarieren (und definieren sowieso
). Wie, hat HerrHagen gezeigt.
Gruß,
Christian
PS Vielleicht solltest Du demnächst nicht alte Threads wiederbeleben, um dort Fragen zu stellen, die nicht zum Kontext passen. Das verwirrt und hilft Dir erst einmal nicht weiter und anderen im Forum, diie suchen, auch nicht.