Aufruf von C++ dll in VB6 funktioniert nicht



  • Hallo!

    Ich habe folgenden Code:

    Option Explicit
    
    Private Declare Function summe Lib "G:\Komprimieren\akt\C\akt\release\ShotCompLib.dll" Alias "#6" (ByVal sum1 As Long, ByVal sum2 As Long) As Long
    
    Private Sub cmdC_Click()
    
    On Error GoTo Fehlerbehandlung
      Call MsgBox(summe(1, 2)) ' This should report "3"
    Exit Sub
    
    Fehlerbehandlung:
      MsgBox Err.Description
      Exit Sub
    
    End Sub
    
    ShotComp.h:
    __declspec(dllexport) int _stdcall summe(int sum1, int sum2);
    
    ShotComp.cpp:
    int ShotComp::summe(int sum1, int sum2){
    	return sum1+sum2;
    }
    

    Beim Aufruf dieser Zeile in VB: "Call MsgBox(summe(1, 2))" erhalte ich jedoch folgenen Fehler: Die Anweisung in "0x785..." verweist auf Speicher in "0x00...001". Der Vorgang read konnte nicht ausgeführt werden. Danach stürzt die gesamte VB-Entwicklungsumgebung ab. Weiters macht mich die Adresse "0x0..00001" etwas stutzig.

    Ich bitte um eure Hilfe,

    mfg



  • Lt. Doku erwartet "MsgBox" als ersten Parameter einen String. Du lieferst ihr aber einen Int (den sie fatalerweise als Stringadresse interpretiert).



  • Nein das ist es auch nicht. Wenn ich die Msg-Box weglasse und nur versuche die Funktion mit call aufzurufen passiert das selbe.

    mfg



  • declarier die c-funktion als "extern C" und mach aus ShotComp::summe einfach nur 'summe'. und schau auch mal hier: http://en.wikipedia.org/wiki/Name_mangling
    🙂



  • Ich habe aus ShotComp::summe nur summe gemacht und mir den Artikel auf wiki durchgelesen, der hat mich jetzt aber auch nicht unmittelbar weitergeholfen. Beim Versuche die Funktoin als extern C zu deklarieren erhalte ich folgende Fehlermeldungen in genau der Zeile:
    syntax error: 'string'
    unexpected token preceding ';'
    syntax error: 'string'
    unexpected token preceding ';'

    ShotComp.h:
    extern "C" __declspec(dllexport) int _stdcall summe(int sum1, int sum2);
    
    ShotComp.cpp:
    int summe(int sum1, int sum2){
        return sum1+sum2;
    }
    

    Ich bitte um eure Hilfe!

    mfg


Anmelden zum Antworten