Eine DLL für VBA schreiben.



  • Hallo,

    ich möchte mit dem C++Builder 6 Prof. eine DLL für VBA (VisualBasic for Applications) schreiben.
    Mein Problem ist, daß VBA immer sagt, "DLL-Einsprungspunkt ShowMe in ...List.DLL nicht gefunden".

    in der DLL habe ich ShowMe so definiert:

    "Hpp"

    void _stdcall ShowMe();
    

    Wie mache ich diese Funktion für VBA sichtbar?

    Gruß Mario



  • in der Headerdatei:

    #ifdef __DLL__
    #define EXP_IMP __declspec(dllexport)
    #endif // __DLL__
    
    #ifndef __DLL__
    #define EXP_IMP __declspec(dllimport)
    #endif // NOT __DLL__
    
    extern "C" EXP_IMP __stdcall int ShowMe(int i);
    

    in der CppDatei:

    // Testfunktion
    int __stdcall ShowMe(int i) {
      MessageBox (Null,"Test","TestCaption",MB_OK);
    
      return i + 2;
    }
    

    Deklaration in der VBA-Datei

    Public Declare Function ShowMe Lib "Test.dll" (ByVal i As Integer) As Integer
    

    Aufruf im VBA-Code

    MsgBox Str$(ShowMe(2))
    

    Gruß Mario



  • Hallo,

    die Funktion ShowMe(2) gibt den richtigen Wert (4) zurück, jedoch die
    MessageBox wird nicht angezeigt.

    Warum?

    Gruß Mario



  • Hallo,

    wiedermal ein Problem mit der DLL, naja eigendlich mit VBA <-> CPPB.

    Ich muß auch etliches an Daten hin- und herschaufeln.
    Man kann doch nicht einfach eine Struct festlegen, oder etwa doch?

    Gruß Mario

    PS: Die MessageBox erscheint immer noch nicht, jedoch Dialoge und
    Formulare werden ordentlich angezeigt.



  • Bei mir sieht das eigentlich so aus:
    Die Header-Datei lasse ich in Ruhe.
    In der cpp steht:
    extern "C" __declspec(dllexport)int ShowMe(int i);
    In den Project Options steht bei Advanced Compiler unter Calling Convetions Standard Call.
    Das klappt gut mit VB und VBA, aus MessageBoxen werden angezeigt.


Log in to reply