Ich wollte einige Funktionen von AutoIt in ein freepascal Projekt einbinden und habe erstmal festgestellt, dass bei weitem nicht alle Funktionen in der Dll zur Verfügung gestellt werden, aber die, die ich haben will sind da, von daher schon mal kein Problem.
Jetzt komme ich aber irgendwie mit der Funktion "WinGetHandle" nicht zurecht.
Zuallererst einmal, ist sie im C-Header irgendwie ziemlich merkwürdig deklariert:
Code:
AU3_API void WINAPI AU3_WinGetHandle(const char *szTitle, /*[in,defaultvalue("")]*/const char *szText, char *szRetText, int nBufSize);
Code:
WinGetHandle "title" [, "text"]
Da ich angefangen hatte zu schreiben wollte ich das jetzt hier nicht einfach wieder löschen, und lasse es einfach mal als Warnung für andere Menschen da, die meinen sie müssten um diese Uhrzeit noch programmieren
Der folgende Perlcode bastelt übrigens pascalcode aus der Headerdatei von AutoItX:
Code:
#!/usr/bin/perl
$header='unit AutoIt3;
{$mode objfpc}{$H+}
{
AutoIt3 freepascal includefile, generated automatically from AutoIt3.h with a converter
}'."\n\n\n\ninterface\n\n";
open(INPUT,"<AutoIt3.h");
@lines=<INPUT>;
close(INPUT);
open(OUTPUT,">autoit3.pas");
print OUTPUT $header;
for $line(@lines){
if($line=~/^\s*AU3_API\s*\w*\s*winapi.*;\s*/i){
if($line=~/^\s*AU3_API\s*long.*;\s*/i){
$line=~s/^\s*AU3_API\s*long\s*WINAPI\s*(.*?)\s*?(\(.*);/function \1\2:longint;stdcall; external 'AutoItX3' name '\1';/i;
}elsif($line=~/^\s*AU3_API\s*void.*;\s*/i){
$line=~s/^\s*AU3_API\s*void\s*WINAPI\s*(.*?)\s*?(\(.*);/procedure \1\2;stdcall; external 'AutoItX3' name '\1';/i;
}
$line=~s/\/\*.*?\*\///gi;
$line=~s/\(\s*void\s*\)/()/i;
$line=~s/(\W*)const\s+char\s+\*(\w*)/\1\2:PChar/gi;
$line=~s/(\W*)char\s+\*(\w*)/\1\2:Pointer/gi;
$line=~s/(\W*)(long|int)\s+(\w*)/\1\3:longint/gi;
$line=~s/,/;/g;
#$line=~s/(\W*)int\s+(\w*)/\1\2:longint/gi;
#$line=~s/\W//g;
#print $line;
print OUTPUT " $line";
}
}
print OUTPUT "implementation\n\nend.\n";
close (OUTPUT);
Und damit wünsche ich euch allen eine gute Nacht
Post Scriptum:
Dieses Forum braucht dringend viel mehr Syntax Highlighting :f
Post Scriptum 2: Gnaaaa, Fensterhandle als String






