Laden...

Office.Interop.Outlook nach Umstellgun auf 64bit bringt Int64-Überlauf

Erstellt von trib vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.946 Views
T
trib Themenstarter:in
708 Beiträge seit 2008
vor 7 Jahren
Office.Interop.Outlook nach Umstellgun auf 64bit bringt Int64-Überlauf

Hallo zusammen,

ich verwende seit einigen Jahren in einem Projekt die Microsoft.Office.Interop.Outlook.dll.
Nun wurde die Hauptanwendung auf 64bit umgestellt.

Seit dem erhalte ich eine Fehlermeldung, sobald ich auf die Attachments einer Mail zugreifen möchte:> Fehlermeldung:

Die arithmetische Operation hat einen Überlauf verursacht.

Das ganze passiert in der 2. Zeile:

var dataObject = new OutlookDataObject(iDataObj);
filenames = (string[])dataObject.GetData("FileGroupDescriptorW");
filestreams = (MemoryStream[])dataObject.GetData("FileContents");
fileCount = filenames.Length;

StackTrace:> Fehlermeldung:

bei System.IntPtr.op_Explicit(IntPtr value)
bei MyDll.OutlookHelper.OutlookDataObject.GetData(String format, Boolean autoConvert)

Durch die Umstellung auf 64bit sind offenbar die Pointer nun vom Typ Int64.
Die Lösungen auf dem Netz "Stell doch auf 32 bit um" oder geht auf EWS, o.ä. sind beide nicht praktikabel.
Zum einen habe ich keinen Einfluss auf die Hauptanwendung und zum anderen brauche ich die Attachments einer aktuell in Outlook ausgewählten Mail.

Habe extra ein System mit 64bit Outlook aufgesetzt und mir die DLL gezogen (15.0.0.0), ohne Erfolg. Ansonsten konnte ich keine extra 64bit Version der Interop-Dll finden.

Wäre für Ideen oder Alternativen dankbar 😃

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

was ist denn MyDll.OutlookHelper.OutlookDataObject?
Sieht aus als wäre das die Stelle, wo der Hase im Pfeffer liegt...

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
trib Themenstarter:in
708 Beiträge seit 2008
vor 7 Jahren

Hi MarsStein,

Du hast natürlich vollkommen Recht! Dachte das wäre nur der Aufruf von der Interop-Funktion. Aber entgegen meiner Annahme, habe ich wirklich noch einen Wrapper in der DLL gefunden. Manchmal ist man eben blind...

Aus

IntPtr fileDescriptorPointer = (IntPtr)((int)fileGroupDescriptorAPointer + Marshal.SizeOf(fileGroupDescriptorAPointer));

mach

IntPtr fileDescriptorPointer = (IntPtr)((Int64)fileGroupDescriptorAPointer + Marshal.SizeOf(fileGroupDescriptorAPointer));

und schon geht´s.

Danke für den Schubs in die richtige Richtung!