EventSink DLL + JNI?

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hallo zusammen,

ich muss/möchte ein Programm schreiben, welches auf unseren MS Exchange Server 2003 ausgehende Nachrichten manipuliert. Dazu muss ich ja eine entsprechende DLL schreiben (hab ich noch kein Plan wie, hab nur VB Code gefunden, möchte das aber lieber in C realisieren, wer hierzu n Link parat hat - ich würde mich freuen, wenn er ihn hier postet :D ). Die Verarbeitung der Mail würde ich gerne in ein Java-Programm auslagern.

Mein Erster Gedanke war "Bauste einfach ne 'Verknüpfung' durch JNI auf". Aber geht das überhaupt? Die DLL wird ja eigentlich vom Exchange und nicht durch mein Java-Programm aufgerufen ???:L .

Danke für eure Tipps :)
 
T

tuxedo

Gast
Wenn Exchange die DLL benutzt/lädt, dann kannst du dir doch JNI sparen... Bau von der DLL aus eine Socketverbidnung zu einem selbstgeschriebenen Java-Server auf. Das ist performanter und du sparst dir die komplizierte JNI Sache. Okay, du musst dann halt die C Datentypen auf Java-Datentypen mappen. Aber das ist ja machbar (und in meinen Augen einfacher wie der JNI Krempel).

- Alex

P.S. Die Socketverbindung hat natürlich gleich auch noch den Vorteil, dass du nicht zwangsweise den Java-Teil der Lösung auf der gleichen Kiste fahren musst. Kannst du natürlich dann nen extra Server im Netzwerk spendieren oder sogar mehrere (clustering?! ;-) )
 

The_S

Top Contributor
Wäre ne Möglichkeit, aber da sind wohl meine C-Kenntnisse zu eingeschränkt :oops: . Aber mal schauen ob ichs hinbekomme, jedenfalls danke für den Tipp :D (für weitere bin ich natürlich auch dankbar).

Ps.: So kompliziert ist JNI auch nicht ;) .
 
T

tuxedo

Gast
Naja, das ist Geschmackssache. Musste vor ein paar Jahren im Praxissemester eine C Libraray an Java anbinden. Bis das mit der extra Wrapper-DLL und den JNI Headern geklappt hat und ich die Java IDE mit der C IDE gekoppelt hatte (also die Sache dass die Header und Co. immer synchron in beiden Projekten sind), war schon aufwendig.

Die Socketkommunikation hingegen war recht easy. Für die aufkommende Datenmenge bei der Emailkommunikation, wird das auch definitiv schneller sein (zumindest wenn du via localhost arbeitest).
 

thE_29

Top Contributor
Zeig mal den VB Code, wenns nicht soviel ist kann ichs dir in C umschreiben.

Oder wenn du es über Socket machst, musst du halt aufpassen das Java Big Endian verwendet und C in Windows Little Endian.

Also kommt ein C Integer (2 byte) verdreht daher und du musst den auch verdreht zurückschicken.
Also die Zahl 42 wäre das in binär: 101010
In 2 bytes wäre das so: 00000000 00101010
Kommen tut es aber so: 00101010 00000000

Code:
  private long parseZahl(byte data[],int iStart,int iEnd)
  {

    long tmp = 0;
    for(int x = iEnd; x >= iStart; x--)
    {
      //wenn es sich nicht um den 1. Durchlauf handelt
      if( x < iEnd)
        tmp = tmp << 8; //dann schiebe das ganze 1en byte rüber

      tmp |= (data[x] & 255);
    }
   return tmp;
 }

Lustig wirds dann halt bei double/floats ;)
 

The_S

Top Contributor
@thE_29

Es geht nicht primär um den VB-Code, sondern mein eigentliches Problem ist, dass ich kA habe, wie eine "C-DLL" aussehen muss, damit die entsprechende Methode bei einem entsprechenden Event aufgerufen wird.

Und ich sehe gerade, dass ich den VB-Code vergessen kann, da das SMTP-EventSink bei MAPI Clients (wie unserem MS Outlook) nicht anspringt. Heißt ich brauch n anderes Event ???:L .

Hier mal eine Anleitung mit VB:

http://www.msexchange.org/articles/Disclaimer-Fun.html
 
Status
Nicht offen für weitere Antworten.

Oben