0

そのため、上記のプロパティを使用して 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 */
 ....

今、私はジャンク値を取得します..

4

2 に答える 2

0

SPropValue.value 構造体は共用体です。これは、メンバーが互いにオーバーラップしていることを意味します。

AddressEntry.PropertyAccessor.GetProperty を使用してプロパティを取得しないのはなぜですか?

于 2013-08-18T17:11:49.630 に答える