Habe Quellcode - brauche Programm... ;-)

  • Das ist wahrsch. mein erstes Posting hier im "Programmieren"... ;)


    Ich habe in einem Lotus Notes - Userforum einen Quellcode für ein Tool gefunden, welches ein Workaround für die Synchronisationsprobleme des P800 mit Lotus Notes sein soll.


    Da ich mit Programmieren so gar nix am Hut habe, kann ich mit dem Quelltext nicht viel anfangen, insbes. kann ich ihn nicht zu einem ausführbaren Programm compilieren. Sieht nach C++ aus, aber wie gesagt - ich keinen Plan habe... :D


    Kann hier jemand was damit anfangen und das ganze mal schnell in eine .exe verwandeln?


    Habe mir den Quelltext auch nochmal angeschaut. Ich vermute mal, daß da oben am Anfang eine spezielle Library für den Zugriff auf Lotus Notes eingebunden wird. stdlib und stdio sagen mir nämlich noch was (ganz früher habe ich die Programmiererei auch mal thematisch anreißen müssen), aber lncppapi ist wahrsch. irgendwas spezielles, oder? Ich weiß leider nicht, wo man das herbekommen kann...


    Anyway - hier der Quelltext (in der Zeile "session.GetDatbase" habe ich bereits den für mich korrekten Pfad und Dateinamen eingetragen, dafür hats gerade noch so gereicht :D ):




    #include <stdlib.h>
    #include <stdio.h>
    #include <lncppapi.h>


    void main( int argc, char *argv[] )
    {
    LNNotesSession session; // create session object on stack
    LNDatabase db; // Create LNDatabase object
    LNViewFolder view; // Create LNViewFolder object
    LNVFEntry entry; // Working entry
    char *call= "None"; // Current call
    int count;
    int c;
    int fix = 0;


    if (argc == 2 && !strcmp(argv[1], "-fix"))
    fix = 1;


    LNSetThrowAllErrors(TRUE);


    try
    {
    call = "Init";
    session.Init();


    call = "GetDatabase";
    session.GetDatabase("c:\\Programme\\Lotus\\Notes\\Data\\decp5567.nsf", &db);


    call = "Database Open";
    db.Open();


    call = "GetViewFolder";
    db.GetViewFolder("Meetings", &view);


    call = "View Open";
    view.Open();


    call = "View GetEntryCount";
    count = view.GetEntryCount();


    if (count != 0)
    {
    call = "GotoFirst";
    view.GotoFirst(&entry);


    for (c = 0; c < count; ++c)
    {
    LNDocument doc;
    LNText text;


    call = "Entry GetDocument";
    entry.GetDocument(&doc);
    call = "Document Open";
    doc.Open();


    call = "Document HasItem";
    if (!doc.HasItem("Body") || doc.GetItemType("Body") != LNITEMTYPE_RICHTEXT)
    {
    LNString str;


    call = "Document GetItem Subject";
    doc.GetItem("Subject", &text);
    call = "Text GetText";
    text.GetText(&str);


    printf("Found missing body item %d \"%s\"", c, (const char *)str);


    if (fix)
    {
    LNRichText rtext;


    call = "rtext SetValue";
    rtext.SetValue("FIXSYNC1");
    call = "CreateItem";
    doc.CreateItem("Body", rtext, LNITEMFLAGS_AUTO_SUMMARY, LNITEMOPTION_DELETE_APPEND);
    printf(" FIXED");
    }


    printf("\n");
    }
    else if (doc.HasItem("Body") && doc.GetItemType("Body") == LNITEMTYPE_RICHTEXT)
    {
    LNRichText rtext;


    doc.GetItem("Body", &rtext);


    if (rtext.GetValueSize() == 0)
    {
    LNString str;


    call = "Document GetItem Subject";
    doc.GetItem("Subject", &text);
    call = "Text GetText";
    text.GetText(&str);


    printf("Found empty body item %d \"%s\"", c, (const char *)str);


    if (fix)
    {
    rtext.SetValue("FIXSYNC2");
    printf(" FIXED");
    }
    printf("\n");
    }
    }


    if (fix)
    {
    call = "Document Save";
    doc.Save();
    }


    call = "Document close";
    doc.Close();


    call = "View GotoNext";
    view.GotoNext(&entry);
    }
    }


    call = "View Close";
    view.Close();


    call = "Database close";
    db.Close();


    call = "Session term";
    session.Term();
    }
    catch(LNSTATUS error)
    {
    char errorBuf[LNERROR_MESSAGE_LENGTH];
    LNGetErrorMessage(error, errorBuf);
    printf("Error: [%s] %s\n", call, errorBuf);
    }
    }

    Ist das eine von den Kirchen, wo man so kleine Cracker kriegt? Ich habe Hunger!

  • Zitat

    #include <lncppapi.h>


    Diese Datei erzeugt einen Fehler beim kompilieren. Eigentlich bin ich ja der absolute C++ Hasser, aber ich schau mal wie ich es hinkriege.


    :rolleyes: :D


    edit:
    Kann die oben angeführte Header-Datei leider nicht finden. :confused:
    ICh denke auch, dass es beim kompilieren auch nicht klappen wird, da das Programm ja den Pfad zur DB benötigt, den du ja schon eingegeben hast. Also bräuchte man einen Lotus Notes Anwender, der die genannte DB als Dummy erzeugt und dann das Programm kompiliert :eek:


    Wer bietet sich freiwillig an ?

  • Irgendeinen Freewarecompiler, womit ich es selbst machen könnte, gibts vermutlich nicht, oder? :rolleyes:

    Ist das eine von den Kirchen, wo man so kleine Cracker kriegt? Ich habe Hunger!

  • Der hatte das Ganze in einem Forum gepostet, wo schon andere Leute nach seinem Posting gefragt hatten, ob er es denn nicht als fertiges Programm zur Verfügung stellen könnte. Kam leider keine Antwort mehr... :(

    Ist das eine von den Kirchen, wo man so kleine Cracker kriegt? Ich habe Hunger!

  • Zitat

    Original geschrieben von AdministratorDr
    edit:
    Kann die oben angeführte Header-Datei leider nicht finden. :confused:

    Die fehlende Datei ist die Lotus Notes C++ API. Leider habe ich aber auch keine Notes Entwicklerversion zur Verfügung... :(


    Gruß,


    Henning.

    ________________________

  • Ich weiß nicht, ob ich meinen Senf jetzt noch draufgeben muss - alles wurde im Grunde gesagt, aber ich möchte nochmal bestätigen:


    Wenn das alles klappen soll, dann braucht ihr unbedingt (!) die Datei
    lncppapi.h


    Als erfahrener CPP-Akronym-Leser sieht man sofort, wofür das steht:
    lotus notes cplusplus api . header
    :D


    Mit der Datei alleine ists nicht getan. Sie ist nur eine Beschreibung der Schnittstellen (Klassen oder globale API-Funktionen), die ein LotusNotes-Binary (DLL, LIB oder EXE) bereitstellt / exportiert). Das heisst für Euch: findet in der LotusNotes-Installation die binäre Datei, die die Symbole exportiert, die lncppapi.h bekanntmacht. Vermutlich heisst sie ähnlich wie die h-Datei. Dieses binäre File muss dem C++-Linker bekannt gemacht werden, damit er die Symbole der neuen Exe/DLL und der API-Exe/DLL zusammenbinden kann. In Visual Studio 6 löst man das recht elegant mit dem Projekteigenschaftsdialog (im Quellcodefenster Alt-F7), im GCC über Makefiles.


    Kleiner Tip für die Suche nach dem richtigen API-Binary: mit VC++6.0 wird eine kleine Applikation mitgeliefert, deren Name mir grade entfallen ist -> sieht ähnlich aus wie der Dependency Walker, aber der wars glaub ich nicht. Mit diesem Tool kann man ganz gut rauskriegen, welche Symbole von einer DLL/Exe/Lib exportiert werden (werden alle angezeigt). Die richtige Bibilothek müsste lt. Quellcode folgende Symbole exportieren:

    Code
    LNNotesSession
    LNDatabase
    LNViewFolder
    LNVFEntry
    LNSetThrowAllErrors
    LNString (oje, Anm. des Verfassers ;) )
    LNSTATUS
    LNERROR_MESSAGE_LENGTH
    LNGetErrorMessage


    Anmerkung zum Schluss: wenn die Lotus-Programmierer einigermaßen kompetent sind, wird die besagte lncppapi noch weitere .h Dateien inkludieren, die alle gefunden werden müssen -> der Include-Pfad muss dementsprechend für den Compiler gesetzt werden (in VC60 auch im Projekteigenschaftsfenster, unter Zusätzliche Include-Dateien).


    HTH,
    stefan

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!