VB-Umstieg: Wie binde ich eine API ein?



  • Hi

    habe langezeit in VB programmiert und dann C und C++ gelernt und nun lerne ich C++ mit den MFC.

    Mit VB bindet man ja API wie folgt ein:

    Private Declare Function GetTempPath Lib "kernel32.dll" Alias "GetTempPathA" _
      (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
    
    Private Sub Command1_Click () 
      Dim RetVal As Long
      Dim TempDir As String
    
      TempDir = Space$(256)
      RetVal = GetTempPath(Len(TempDir), TempDir)
    
      If RetVal <> 0 Then 
        Debug.Print "Temp-Verzeichnis: " & Left$(TempDir, RetVal) 
      End If 
    End Sub
    

    Hab das schnell von VBarchiv.net geklaut 😉

    Wie läuft sowas mit MFC? Ich hab hier eine Dialog-Anwendung, falls das wichtig ist.

    Vielen Dank
    Bernd



  • Meinst du das:

    Private Declare Function GetTempPath Lib "kernel32.dll" Alias "GetTempPathA" _ 
      (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
    

    Ich kenne mich nicht mit VB aus, aber das sieht wie eine Deklaration aus. Bei WinAPI-Funktionen musst du dazu den passenden Header einbinden (Welcher das ist, steht in der MSDN), z.b.

    #include <windows.h>
    

    windows.h ist aber soweit ich weiß eh schon inkludiert.



  • OK, aber in welcher der cpp-Dateien muss ich nun den header und den Code implementieren?

    Ich hab hier ein Projekt "test"

    muss das jetzt in die test.cpp oder testDlg.cpp

    Vielen Dank
    Bernd



  • Wenn du noch eine StdAfx.h hast, dann da rein. (Wenn es nicht schon drin steht.)
    Sonst nur in die Datei, in der du die Funktionen auch nutzt, bei dir also (vermute ich) testDlg.cpp.



  • Ich komme auch von VB und ich sage Dir, die Einbindung der API ist in C++ wesentlich einfacher, als in VB.
    Deiner Frage habe ich aber entnommen, dass Du gar keine Ahnung hast wie's geht.
    Besorg Dir erstmal das API-Tutorial von Erhard Henkes www.henkessoft3000.de, damit kannst Du Dir erst mal einen Überblick verschaffen.
    Wenn das nicht mehr reicht, frag' Charles Petzold.



  • Das es leichter ist, ist mir auch aufgefallen. Das Online-Tut und der Petzold beziehen sich doch aber nur auf die reine Entwicklung von Windows-Applikationen mit den APIs. Was mir aber noch Probleme bereitet ist, in welche Datei der Code reinkommt. Sind ja immer mehrere zur Auswahl. Aber mit der Zeit kommt hoffentlich die Routine.

    Vielen Dank
    Bernd



  • In Deinem Fall kommt der Aufruf wahrscheinlich in die Dlg.cpp.
    Kommt drauf an, was Du machen willst.

    Beispiel: GlobalMemoryStatus
    - kann in den Konstruktor der Dlg Klasse,
    - in OnInitDialog der Dlg Klasse,
    - in OnTimer der Dlg Klasse,
    - Button funzt ebenso.



  • übersetzt in mfc im cpp-file

    #include "StdAfx.h" //hier sind fast alle systemrel. header eingebunden
    
    //ansonsten siehe Platform SDK
    //Header: Declared in Winbase.h; include Windows.h.
    
    BOOL CTestDlg::OnInitDialog()
    {
      CDialog::OnInitDialog();
    
      //übersetzt (etwas übertrieben)
      CString sTemp; 
      DWORD dwLenght=::GetTempPath(_MAX_PATH, sTemp.GetBuffer(_MAX_PATH));
      ASSERT(dwLenght!=0);
      sTemp.ReleaseBuffer(); 
    
     }
    

Anmelden zum Antworten