1. C# / Говнокод #1646

    +129.7

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    [StructLayout(LayoutKind.Explicit, Size=264)]
    public struct STRRET
    {
         [FieldOffset(0)]
         public UInt32 uType;    // One of the STRRET_* values
    
         [FieldOffset(4)]
         public IntPtr pOleStr;    // must be freed by caller of GetDisplayNameOf
    
         [FieldOffset(4)]
         public IntPtr pStr;        // NOT USED
    
         [FieldOffset(4)]
         public UInt32 uOffset;    // Offset into SHITEMID
    
         [FieldOffset(4)]
         public IntPtr cStr;        // Buffer to fill in (ANSI)
    }

    Обертка над структурой STRRET. Доставляет тут http://www.pinvoke.net/default.aspx/Structures/STRRET.html

    Запостил: dethtroll, 20 Августа 2009

    Комментарии (6) RSS

    • и где тут говнокод? вы б ещё постили код из автоматически-сгенеренных (утилитой tlbimp) обертак над com...
      Ответить
      • все поля после uType ссылаются на одно место в памяти
        pStr, которой нет в *.h файле еще и NOT USED
        строку cStr, хранящуюся по значению (char cStr[MAX_PATH];), патаются пихнуть указатель
        Ответить
        • Ага, но это просто не рабочий код.
          Ответить
        • "все поля после uType ссылаются на одно место в памяти"

          Ну и кто здесь быдлокодер?
          На msdn:
          union
          {
          LPWSTR pOleStr;
          UINT uOffset;
          char cStr[MAX_PATH];
          } DUMMYUNIONNAME;

          Это они так сишные union'ы описали, всё верно. Что такое юнионы знаем хоть?
          Ответить
    • MarshalAsAttribute походу отменили
      Ответить
    • По оффсетам, ссылающимся в одно и то же место, можно подумать, что это такая реализация сишных union'ов.

      По ссылке по традиции не ходил.
      Ответить

    Добавить комментарий