Announcement

Collapse
No announcement yet.

c/c++ dll vba msaccess

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • c/c++ dll vba msaccess

    Hallo Leute,

    ich bin neu im Forum und ebenso neu in der Entwicklung von c/c++ Anwendungen. Ich benutze Eclipse CDT. Folgende Fragen habe ich, da man eine Menge unnützes lesen muß und dennoch nicht schlauer wird.:

    1.Kann ich folgenden Code der .dll (Text a) in Access einbinden?
    (Habe von sogenannten COM DLL´s gelesen)
    Wenn nein, was muß ich noch ändern.

    2.Habt ihr noch Programmiertechnisch ein paar Tips für mich sowohl für (Text a) als auch für (Text b), in welchem ich die dll teste.
    (Habe den myPuts .dll Code, sowie den aufrufenden .exe Code der msdn genutzt und lange genug gebraucht um da einigermaßen durchzusteigen.)

    Text a: (.dll)

    #include <windows.h>

    #ifdef __cplusplus // If used by C++ code,
    extern "C" { // we need to export the C interface
    #endif

    __declspec(dllexport) int __cdecl Addierentest(INT a, INT b)
    {
    int wert = a + b;
    return wert;
    }

    #ifdef __cplusplus // If used by C++ code,
    } // we need to export the C interface
    #endif

    #ifdef __cplusplus // If used by C++ code,
    extern "C" { // we need to export the C interface
    #endif

    __declspec(dllexport) int __cdecl Subtrahierentest(INT a, INT b)
    {
    int wert = a - b;
    return wert;
    }

    #ifdef __cplusplus // If used by C++ code,
    } // we need to export the C interface
    #endif

    Text b: (.exe)

    #include <windows.h>
    #include <stdio.h>

    typedef long (__cdecl *MYPROC)(INT, INT);

    void main(VOID)
    {
    HINSTANCE hinstLib;
    MYPROC Addi;
    MYPROC Subbi;
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

    // Get a handle to the DLL module.

    hinstLib = LoadLibrary(TEXT("E:\\Arbeit\\Eclipse_Projects\\My firstdll\\Debug\\libMyfirstdll.dll"));

    // If the handle is valid, try to get the function address.

    if (hinstLib != NULL)
    {
    Addi = (MYPROC) GetProcAddress(hinstLib, "Addierentest");



    if (NULL != Addi) // Wenn die Adresse der Funktion i.O dann weiter
    {
    fRunTimeLinkSuccess = TRUE;
    int wert1 = 10;
    int wert2 = 5;
    int wert3 = (Addi)(wert1,wert2);
    printf("%d",wert3);
    printf("\n");
    }
    if (! fRunTimeLinkSuccess)
    {
    printf("Funktion Addi nicht gefunden.\n");
    fRunTimeLinkSuccess=FALSE;
    }
    Subbi = (MYPROC) GetProcAddress(hinstLib, "Subtrahierentest");

    if (NULL != Subbi) // Wenn die Adresse der Funktion i.O dann weiter
    {
    fRunTimeLinkSuccess = TRUE;
    int wert1 = 10;
    int wert2 = 5;
    int wert3 = (Subbi)(wert1,wert2);
    printf("%d",wert3);
    printf("\n");
    }
    if (! fRunTimeLinkSuccess)
    {
    printf("Funktion Subbi nicht gefunden.\n");
    fRunTimeLinkSuccess=FALSE;
    }
    // Freigeben des Speicherbereichs
    fFreeResult = FreeLibrary(hinstLib);
    }
    }
Working...
X