by
Roland Schumacher alias GENiALi
23. September 2009 -- 174 Wörter
-- 456 mal gelesen
Dieser Beitrag ist mir was wert:
Wenn das bestimmt werden soll wird es schwierig. Ich musste einem Problem nachgehen das auftaucht wenn man mit der VSTO unter Excel in einem 64Bit OS arbeitet. Gewisse Operationen verursachen folgende Fehlermeldung:
Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))
Abhilfe schafft der Artikel KB320369. Der Fehler wird offensichtlich auf einen Fehler in der VSTO zurück geführt.
Ich wollte den Hack aber nicht auch unter 32Bit OS anwenden. Aber dafür muss ich irgend wie bestimmen ob der Code unter einem 64Bit oder 32Bit OS ausgeführt wird. Das .NET Framework scheint da keine Methode anzubieten um das einfach zu lösen. Im Internet sind einige kuriose Lösungen für das Problem zu finden.
Ich habe jetzt folgende umgesetzt die unter Vista 64Bit und Windows 7 32Bit funktioniert.
//Nicht vergessen
using System.Runtime.InteropServices;
[DllImport("kernel32.dll")]
private static extern uint GetSystemWow64Directory(StringBuilder lpBuffer, uint uSize);
internal static byte GetOSBitness()
{
StringBuilder lpBuffer = new StringBuilder(260);
uint uSize = GetSystemWow64Directory(lpBuffer, 260);
if (uSize > 0) return 1; //64-bit
return 0; //32-bit
}
Gefunden –> HOWTO: Detect Process Bitness
Diese Lösung funktioniert aber nur ab Windows XP (MSDN).
