そのため、上記のプロパティを使用して SMTP アドレス プロパティを取得しようとしています。しかし、算術オーバーフローが発生します。
基本的に使用しています:
IUnknown = Marshal.GetIUnknownForObject(recipientAddress.MAPIOBJECT);
HrGetOneProp(IMAPIProperty, PR_EMS_AB_PROXY_ADDRESSES, ref pPropValue);
SPropValue propValue = (SPropValue)Marshal.PtrToStructure(pPropValue, typeof(SPropValue));
IntPtr ptrToConvert = new IntPtr(propValue.Value); //arithmetic overflow
sProperty = Marshal.PtrToStringAnsi(ptrToConvert);
私が作成した構造は次のとおりです。
private struct SPropValue {
public unit ulPropTag
public uint dwAlignPad
public long Value
}
問題は構造にあると思います: http://msdn.microsoft.com/en-us/library/bb415341.aspx
問題は、propValue.Value が実際には「長い」ため、IntPtr に収まらないことです。構造体は実際には SPropValue 構造体のポインターであると思います。
そのため、使用方法と問題の解決方法がよくわかりません。
どんな助けも感謝します...
**編集**ユニオンPVクラスを作成しようとしました.c ++からこれはユニオンクラスです:
typedef union _PV
{
short int i; /* case PT_I2 */
LONG l; /* case PT_LONG */
ULONG ul; /* alias for PT_LONG */
float flt; /* case PT_R4 */
double dbl; /* case PT_DOUBLE */
unsigned short int b; /* case PT_BOOLEAN */
CURRENCY cur; /* case PT_CURRENCY */
double at; /* case PT_APPTIME */
FILETIME ft; /* case PT_SYSTIME */
...
...
だから私はこの構造体を作成しました:
[StructLayout(LayoutKind.Explicit)]
private struct PV_Union
{
[FieldOffset(0)]
public Int16 i; /* case PT_I2 */
[FieldOffset(0)]
public Int32 l; /* case PT_LONG */
[FieldOffset(0)]
public UInt32 ul; /* alias for PT_LONG */
....
今、私はジャンク値を取得します..