Servus Com
Ich habe in c++ eine Klassenbibliothek erstellt und hab jtz ne tolle .dll Datei
Kann ich diese nun in AutoIt nutzen?
Und wenn ja, wie?
Danke schon mal
PS: bei SuFu finde ich nur 100e Seiten von Progandys Object-UDF...
Servus Com
Ich habe in c++ eine Klassenbibliothek erstellt und hab jtz ne tolle .dll Datei
Kann ich diese nun in AutoIt nutzen?
Und wenn ja, wie?
Danke schon mal
PS: bei SuFu finde ich nur 100e Seiten von Progandys Object-UDF...
Warum solltest du sie nicht benutzen können? Wenn du kein .NET benutzt sollte das klappen
AutoIt kann nur mit stinknormalen "flachen" Funktionen umgehen. C++-Objekte musst du also erst in normale C-Funktionen wrappen bevor du sie in AutoIt per DLLCall nutzen kannst.
Solltest du dein Objekt jedoch nach den IDispatch-Regeln erstellt haben, kannst du es in AutoIt über die Objekt-Syntax verwenden. Du brauchst nur noch eine Funktion, die dir das Objekt erstellt und an AutoIt weiterleitet. (So machen wir es übrigens in AutoItObject)
Danke für den Tipp
Ich versuch mich mal dran
(Wobei ich noch nicht weiß ob sich der Aufwand lohnt...)
Ich habs jtz mal so gemacht.
Allerdings hab ich noch eine Frage:
Die Klasse heißt Person, und die Funktion gibt deswegen ein Object vom Typ Person zurück.
[autoit]$aRes = DllCall($dll, "", "PersonCreate")
[/autoit]
Was muss ich nun beim AutoIt Aufruf als Rückgabetyp angeben?
Ich hab bei den gültigen Typen von DllCall nichts gefunden...
Am besten Übergibst du den Pointer, ich weiß aber nicht wie du das dann in Autoit Handlen willst
Ich habe eine Klasse "Person" erstellt.
Und eine Funktion, die eine Instanz dieser Klasse erstellt und diese zurückgibt.
Jetzt weiß ich aber nicht, was ich beim DllCall von AutoIt beim Returntype angeben muss...
$aRes = DllCall($dll, "?", "PersonCreate")
[/autoit]extern "C" Person __declspec(dllexport) __cdecl PersonCreate() {
Person temp("Test", 32, "Berlin", 80, 1.82f);
return temp;
}
So hast du das doch gemeint, oder?
Wenn du die Klasse direkt nutzen willst, muss diese als IDispatch implementiert sein. Das ist aber gar nicht so einfach.
In AutoIt gibt es dann den Typ idispatch.
Einfacher ist es, die DLLCall-Wrapper zu schreiben.
ich versuchs mal...
danke
Erledigt
Wenn du ein objekt zurück geben willst, gibtst du einfach den pointer auf das objekt zurück und weist es einem struct zu, welches die gleich variabeln enthält wie die klasse.
Wenn muss die Funktion aussehen, wenn sie nen Pointer zurückgibt?
TestKlasse* Funktion(param n, ..)
{
..
return &Object;
}
gibt nen Error...
Nein, so:
void* GetObject(/**iwas**/)
{
return (void*)&Object // Durch die Refernzierung bekommst du den Pointer auf das Objekt, den du dann zurück gibst
}