|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 14.06.2012, 17:41 Titel: Tapi anbinden / (und Typedefinition mit Zeiger auf Funktion) |
|
|
Hallo,
ich weiß, diese Frage ist nicht ganz neu, aber wohl immer wieder mal aktuell:
Ich würde gern die TAPI anbinden - lediglich um eingehende Anrufe zu protokollieren oder ausgehende Anrufe zu starten.
Die VC++/.NET-Beispielprogramme und -codes unter http://www.julmar.com/tapi/ sind auch prima, aber dennoch nicht so trivial auf andere Systeme zu portieren, wie mir scheint.
Es kommt ja sicher auch nicht von ungefähr, dass die Tapi-includes noch *nicht* Bestandteil von FreeBasic sind!?
Wenn also jemand BASIC-Beispielcode (am besten ohne GUI) zu dem Thema kennt, schaue ich mir den sehr gerne an ... .
Bis dahin versuche ich mich gerade selbst an einer Lösung und bin als FreeBasic-Newbie bei der Übersetzung der tapi.h
(hier: http://mingw-w64.sourcearchive.com/documentation/2.0-1/tapi_8h_source.html) an einem sprachlichen Problem hängen geblieben:
Die tapi.h enthält für die Callbacks typedefs der Form
typedef void (CALLBACK *LINECALLBACK)(DWORD hDevice,DWORD dwMessage,DWORD_PTR dwInstance,DWORD_PTR dwParam1,DWORD_PTR dwParam2,DWORD_PTR dwParam3);
die ich nicht für meine "tapi.bi" übersetzen/auflösen kann ('h_2_bi' übrigens auch nicht).
Kann mir da eventuell jemand auf die Sprünge helfen?
lG |
|
Nach oben |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 14.06.2012, 17:54 Titel: |
|
|
Übersetzt:
Code: | Type LINECALLBACK As Sub(ByVal hDevice as DWORD, ByVal dwMessage As DWORD, ByVal dwInstance As DWORD_PTR, ByVal dwParam1 As DWORD_PTR, ByVal dwParam2 as DWORD_PTR, ByVal dwParam3 As DWORD_PTR) |
|
|
Nach oben |
|
|
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 15.06.2012, 12:36 Titel: Re:Tapi anbinden(und Typedefinition mit Zeiger auf Funktion) |
|
|
> Übersetzt:
>
>Type LINECALLBACK As Sub(ByVal hDevice as DWORD, ByVal >dwMessage As DWORD, ByVal dwInstance As DWORD_PTR, ByVal >dwParam1 As DWORD_PTR, ByVal dwParam2 as DWORD_PTR, ByVal >dwParam3 As DWORD_PTR)
>
(Tags funktionieren für mich hier, anders als in anderen FB-Foren, nicht !?)
Vielen Dank für die schnelle Hilfe,
Die Antwort lag also schon teilweise in meiner Frage begründet:
Da hab' ich mal wieder vergessen, dass BASIC Sub und Function unterscheidet, und so versuchte immer immer was mit 'As Function' ...
lG |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 15.06.2012, 17:26 Titel: |
|
|
Tags funktionieren nur dann nicht, wenn du das Kästchen "BBCode in diesem Beitrag deaktivieren" angekreuzt hast.
[code]Beispiel ohne Aktivierung von BB-Code[/code] _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 21.06.2012, 12:01 Titel: |
|
|
Zitat: | Tags funktionieren nur dann nicht, wenn du das Kästchen "BBCode in diesem Beitrag deaktivieren" angekreuzt hast. |
Danke
Ich bin inzwischen, dank Eurer Hilfe und dem fantastischen FreeBasic, mit der Tapi auch recht weit gekommen, hänge aber nun an einem Problem, was ich mir nicht erklären kann:
Ich habe (siehe Ausschnitt unten) eine Tapi32.bi erstellt, die wunderbar kompiliert und in meiner Anwendung erfolgreich eingebunden ist. Auch habe ich bereits erfolgreich auf etliche Tapi32-Funktionen zugegriffen (z.B. auch auf openLine() oder lineIntialize() (ohne 'Ex').
Beim Zugriff auf lineInitializeExA()' oder ' lineInitializeExW()' bekomme ich aber einen Linkerfehler:
tapi.o:fake:(.text+0xfa): undefined reference to `LineInitializeExA@28'
Der Zugriff selbst ist natürlich recht nichtssagend und sieht schlicht so aus:
Code: | tapiSuccess = lineInitializeExA(lphLineApp, hInstance, lpfnCallback, @szAppName, lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams) |
und da ich alle Parametertypdeklarationen peinlich überprüft habe und auch keine Typwarnungen bekomme (aber testweise provozieren kann, wenn ich eine Variable falsch deklariere), gehe ich sicher davon aus, dass die Parameter der deklarierten Signatur entsprechen. Auch wenn ich im Alias der Deklaration "spaßenshalber" auf eine andere, in der Signaturlänge passende, Funktion der tapi32.dll verweise (z.B. auf lineForward(), gleiche Signaturlänge von '28'), läuft der Kompiler problemlos durch.
Also ist die Methode scheinbar nicht in der tapi32.dll!? Doch! Tools wie pexports bestätigen das auch.
Dann dachte ich an ein 64-Bit-Problem, da ich unter Windows 7 64-bit kompiliere und auf die enstsprechende tapi32.dll verweise. Aber auch der Verweis auf eine kopierte, passende 32-bit tapi32.dll führt zum selben Ergebnis...
Kann mir jemand helfen, was da los ist?
lG
Auschnitt aus meiner "Tapi32.bi":
Code: | ' LONG WINAPI lineInitializeExA(LPHLINEAPP lphLineApp,HINSTANCE hInstance,LINECALLBACK lpfnCallback,LPCSTR lpszFriendlyAppName,LPDWORD lpdwNumDevs,LPDWORD lpdwAPIVersion,LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams);
Declare FUNCTION lineInitializeExA StdCall Lib "tapi32" Alias "LineInitializeExA"( _
ByVal lphLineApp AS LPHLINEAPP, _
ByVal hInstance AS HINSTANCE, _
ByVal lpfnCallback AS LINECALLBACK, _
ByVal lpszFriendlyAppName AS LPCSTR, _
ByVal lpdwNumDevs AS LPDWORD, _
ByVal lpdwAPIVersion AS LPDWORD, _
ByVal lpLineInitializeExParams AS LPLINEINITIALIZEEXPARAMS) AS Long |
|
|
Nach oben |
|
|
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 21.06.2012, 14:35 Titel: |
|
|
Ah so ...,
beim Schreiben fing bereits die Antwort an zu dämmern, :
FreeBasic ist ja unter der Haube (GC)C; da ist wohl eine Bibliotheksdatei im Spiel.
Da habe ich mir gerade mit dlltool und einer aktuellen tapi32.def selbst eine libtapi32.dll.a erstellt - und schon geht's logischerweise.
Die Link-Varianten unter FreeBasic schaue ich mir bei Gelegenheit lieber mal genauer an.
Ich denke, da werden so einige drüber stolpern, die von anderen BASIC-Dialekten kommen .... |
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
|
kawe
Anmeldungsdatum: 25.03.2012 Beiträge: 41
|
Verfasst am: 22.06.2012, 16:02 Titel: |
|
|
Schön. Ein Grund, warum ich mich nach langer Suche für Freebasic entschieden habe, ist das tolle Forum, |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|