Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Tapi anbinden / (und Typedefinition mit Zeiger auf Funktion)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kawe



Anmeldungsdatum: 25.03.2012
Beiträge: 41

BeitragVerfasst am: 14.06.2012, 16:41    Titel: Tapi anbinden / (und Typedefinition mit Zeiger auf Funktion) Antworten mit Zitat

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 ... lächeln.

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
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 14.06.2012, 16:54    Titel: Antworten mit Zitat

Ü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
Benutzer-Profile anzeigen Private Nachricht senden
kawe



Anmeldungsdatum: 25.03.2012
Beiträge: 41

BeitragVerfasst am: 15.06.2012, 11:36    Titel: Re:Tapi anbinden(und Typedefinition mit Zeiger auf Funktion) Antworten mit Zitat

> Ü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, lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 15.06.2012, 16:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
kawe



Anmeldungsdatum: 25.03.2012
Beiträge: 41

BeitragVerfasst am: 21.06.2012, 11:01    Titel: Antworten mit Zitat

Zitat:
Tags funktionieren nur dann nicht, wenn du das Kästchen "BBCode in diesem Beitrag deaktivieren" angekreuzt hast.

Danke verlegen happy

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
Benutzer-Profile anzeigen Private Nachricht senden
kawe



Anmeldungsdatum: 25.03.2012
Beiträge: 41

BeitragVerfasst am: 21.06.2012, 13:35    Titel: Antworten mit Zitat

Ah so ...,

beim Schreiben fing bereits die Antwort an zu dämmern, Kopf schütteln :

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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 21.06.2012, 14:39    Titel: Antworten mit Zitat

Irgendwann habe ich ein ganz bisschen was dazu zusammengeschrieben, aber das kratzt nichtmal an der Oberfläche der Thematik: http://forum.qbasic.at/viewtopic.php?t=7250
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kawe



Anmeldungsdatum: 25.03.2012
Beiträge: 41

BeitragVerfasst am: 22.06.2012, 15:02    Titel: Antworten mit Zitat

Zitat:
Irgendwann habe ich ein ganz bisschen was dazu zusammengeschrieben, aber das kratzt nichtmal an der Oberfläche der Thematik: http://forum.qbasic.at/viewtopic.php?t=7250


Schön. Ein Grund, warum ich mich nach langer Suche für Freebasic entschieden habe, ist das tolle Forum, happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz