Mit Api's arbeiten

  • VB

  • roblon
  • 1318 Aufrufe 2 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mit Api's arbeiten

    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
    [COLOR="Blue"][SIZE="3"][COLOR="Yellow"][COLOR="DarkOrange"]*[/color][COLOR="Orange"]*[/color]*[/color] FreeSoft-Board.to 4 [COLOR="Lime"]EVER[/color] [COLOR="Yellow"]*[COLOR="Orange"]*[/color][COLOR="DarkOrange"]*[/color][/color][/SIZE][/color]
  • 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:

    Quellcode

    1. #include <windows.h>
    2. BOOL WINAPI DllEntryPoint ( HINSTANCE hDLL, DWORD dwREASON, LPVOID Reserved )
    3. {
    4. switch (dwREASON)
    5. {
    6. case DLL_PROCESS_ATTACH: { break; }
    7. case DLL_PROCESS_DETACH: { break; }
    8. }
    9. return TRUE;
    10. }
    11. double _stdcall Flaeche(double r)
    12. {
    13. double ret;
    14. double PI=3.14159265;
    15. ret=PI*r*r;
    16. return ret;
    17. }
    18. double _stdcall Umfang(double r)
    19. {
    20. double ret;
    21. double PI=3.14159265;
    22. ret=2*r*PI;
    23. return ret;
    24. }
    Alles anzeigen

    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:

    Quellcode

    1. LIBRARY Kreis
    2. CODE PRELOAD MOVEABLE DISCARDABLE
    3. DATA PRELOAD SINGLE
    4. EXPORTS
    5. Flaeche @1
    6. 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:

    Quellcode

    1. Option Explicit
    2. Public Declare Function Flaeche Lib "Kreis.dll" (ByVal Radius As Double) As Double
    3. Public Declare Function Umfang Lib "Kreis.dll" (ByVal Radius As Double) As Double


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

    Quellcode

    1. Option Explicit
    2. Private Sub cmdEnde_Click()
    3. End
    4. End Sub
    5. Private Sub opt1_Click(Index As Integer)
    6. Dim f As Double, u As Double, i As Integer
    7. If txtEingabe.Text <> "" And IsNumeric(txtEingabe.Text) Then
    8. Select Case Index
    9. Case 0
    10. f = Flaeche(txtEingabe.Text)
    11. MsgBox "Kreisfläche: " & Format(f, "0.000"), , "Kreisfläche"
    12. opt1(0).Value = False
    13. Case 1
    14. u = Umfang(txtEingabe.Text)
    15. MsgBox "Kreisumfang: " & Format(u, "0.000"), , "Kreisumfang"
    16. opt1(1).Value = False
    17. Case 2
    18. f = Flaeche(txtEingabe.Text)
    19. u = Umfang(txtEingabe.Text)
    20. MsgBox "Kreisfläche: " & Format(f, "0.000") & vbCrLf & "Kreisumfang: " & Format(u, "0.000"), , _
    21. "Kreisfläche und Kreisumfang"
    22. opt1(2).Value = False
    23. End Select
    24. Else
    25. MsgBox "Eingabe muss numerisch erfolgen!", vbOKOnly + vbCritical, "Eingabefehler"
    26. For i = 0 To 2
    27. opt1(i).Value = False
    28. Next i
    29. End If
    30. txtEingabe.SetFocus
    31. txtEingabe.Text = ""
    32. End Sub
    Alles anzeigen
    FERTIG
  • HI,

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

    MFG RoBlon
    [COLOR="Blue"][SIZE="3"][COLOR="Yellow"][COLOR="DarkOrange"]*[/color][COLOR="Orange"]*[/color]*[/color] FreeSoft-Board.to 4 [COLOR="Lime"]EVER[/color] [COLOR="Yellow"]*[COLOR="Orange"]*[/color][COLOR="DarkOrange"]*[/color][/color][/SIZE][/color]