Mit Api's arbeiten VB 

Status
Für weitere Antworten geschlossen.

roblon

Registered +
Registriert
Apr. 2007
Beiträge
88
Hallo,

ich wollte gerne wissen ob und wie ich eine C++ Api in VB6 Einbauen kann….
Also ich wollte gerne die Xinput Api in mein VB6 Projekt einbeziehen… und nun weiß ich aber leider nicht wie das gehen soll...
In der DirectX SDK sind ja einige beispiele zu der Xinput api, aber leider nur in C++….
Ich hoffe ihr könnt mir irgendwie weiter helfen…. ;)

Vielen Dank im Voraus,

Mit freundlichen Grüßen

RoBlon
 
Ich habe irgendwann mal so ein Mini-Tutorial fuer die Einbindung von C++ in VB 6 geschrieben. Vielleicht kannst du ja etwas damit anfangen:

----------------------------
Ich programmiere eine Dynamische Windows-DLL mit C++ und binde diese Bibliothek in meine Visual Basic-Programmierung als API-Schnittstelle ein.
Aufgabenstellung soll es sein, z.B. eine Bibliothek zu generieren, die mir Funktionen fuer eine Kreisberechnung zur Verfuegung stellt (irgendwas halbwegs sinnvolles sollte es halt schon sein!). Als Compiler waehlen wir Microsoft Visual C++ 6.

Soweit verstanden? Also gut, los gehts!

Compilerprogramm starten und Datei -> Neu waehlen. Im Dialogfenster waehlen wir die Registerkarte "Projekte" aus und anschliessend den Eintrag "Win32 Dynamic Link Library". Es muss ein Name fuer die zu erstellende DLL angegeben werden, wir nennen sie "Kreis" (geschickte Benennung, nicht wahr??)

Nachdem wir mit OK bestaetigt haben, treffen wir die Auswahl "Ein leeres DLL-Projekt" und schliessen mit Fertigstellen und OK ab.

So, wir sind in der Entwicklungsumgebung und haben immerhin schon mal ein Projekt (wenn auch ein leeres). Im Arbeitsbereich-Fenster sehen wir die Registerkarten "Klassen" und "Dateien" und waehlen "Dateien". Den Datenbaum evtl. oeffnen und dem Ordner "Quellcodedateien" mittels Datei -> Neu eine C++-Quellcodedatei hinzufuegen (Name: von mir aus "Kreis").

Jetzt gehts los:
Die Datei Kreis.cpp unterhalb vom Ordner "Quellcodedateien" auswaehlen und folgenden Code einfuegen:

Code:
#include 

BOOL WINAPI DllEntryPoint ( HINSTANCE hDLL, DWORD dwREASON, LPVOID Reserved )
{
switch (dwREASON)
{
case DLL_PROCESS_ATTACH: { break; } 
case DLL_PROCESS_DETACH: { break; } 
}
return TRUE;
}


double _stdcall Flaeche(double r)
{
double ret;
double PI=3.14159265;
ret=PI*r*r;
return ret;
}

double _stdcall Umfang(double r)
{
double ret;
double PI=3.14159265;
ret=2*r*PI;
return ret;
}
Die Funktion "BOOL WINAPI DllEntryPoint" uebernehmen wir 1 zu 1. Sie wird in jedem DLL-Projekt benoetigt. Die Funktionen "Flaeche", bzw. "Umfang" sind Eigengewaechse und sollen uns bei Aufruf und Uebergabe eines Kreisradius-Wertes die berechnete Kreisflaeche, respektive den Kreisumfang zurueckliefern.

Jetzt muessen wir noch eine Textdatei anlegen, und zwar auf demselben Weg, wie wir die CPP-Datei angelegt haben, mit dem Unterschied, dass wir als Namen "Kreis.def" angeben.

Und hier der Inhalt fuer diese Datei:

Code:
LIBRARY Kreis

CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLE

EXPORTS
Flaeche @1
Umfang @2
In der ersten Zeile hinter LIBRARY muss der Projektname stehen, der ja gleichzeitig auch der Name fuer die zu erstellende DLL-Datei wird.
Unterhalb von EXPORTS stehen untereinander die Namen der eigenen Funktionen aus der Kreis.cpp-Datei, sauber durchnummeriert, wie ausgewiesen!

Jetzt eigentlich nur noch kompilieren:
STRG-F7 - kompilieren, bzw:
F7 - erstellen

Die fertige DLL findet man in seinem Dateisystem im Projektordner im Unterordner "Release" !!!
ACHTUNG: Die DLL muss natuerlich in den Windows\System32-Ordner, wie alle anderen DLL's auch.

Nachdem dieses nun gescheh'n, koennen wir zu was and'rem uebergeh'n.
Projekt, 2. Teil. Das Einbinden unserer DLL in VB:

Ein neues VB6-Projekt mit einer TextBox, einem OptionButton-Array (mit 3 Elementen) und einem CommandButton erstellen. Ausserdem eine Moduldatei einfuegen. In die Moduldatei kommen die API-Deklarationen unserer Kreis-DLL:

Code:
Option Explicit

Public Declare Function Flaeche Lib "Kreis.dll" (ByVal Radius As Double) As Double
Public Declare Function Umfang Lib "Kreis.dll" (ByVal Radius As Double) As Double

...und hier der VB-Code fuer das Formular:

Code:
Option Explicit

Private Sub cmdEnde_Click()
End
End Sub

Private Sub opt1_Click(Index As Integer)
Dim f As Double, u As Double, i As Integer
If txtEingabe.Text <> "" And IsNumeric(txtEingabe.Text) Then
Select Case Index
Case 0
f = Flaeche(txtEingabe.Text)
MsgBox "Kreisfläche: " & Format(f, "0.000"), , "Kreisfläche"
opt1(0).Value = False
Case 1
u = Umfang(txtEingabe.Text)
MsgBox "Kreisumfang: " & Format(u, "0.000"), , "Kreisumfang"
opt1(1).Value = False
Case 2
f = Flaeche(txtEingabe.Text)
u = Umfang(txtEingabe.Text)
MsgBox "Kreisfläche: " & Format(f, "0.000") & vbCrLf & "Kreisumfang: " & Format(u, "0.000"), , _
"Kreisfläche und Kreisumfang"
opt1(2).Value = False
End Select
Else
MsgBox "Eingabe muss numerisch erfolgen!", vbOKOnly + vbCritical, "Eingabefehler"
For i = 0 To 2
opt1(i).Value = False
Next i
End If
txtEingabe.SetFocus
txtEingabe.Text = ""
End Sub
FERTIG
 
HI,

danke, ich glaube das ist genau das was ich gesucht habe ;)
werde es gleich mal ausprobieren ;)

MFG RoBlon
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten