سؤال

أحاول الحصول على معلومات حول جهاز Windows Mobile من تطبيق سطح المكتب (مكتوب في C #). لقد بحثت MSDN ووجدت أن الوظيفة التي أحتاجها هي في Rapi.dll:

VOID CeGetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

المعلمة هي مؤشر إلى منظم تمزق مثل هذا:

typedef struct _SYSTEM_INFO {
    union {
       DWORD dwOemId;
       struct {
          WORD wProcessorArchitecture;
          WORD wReserved;
       };
    };
    DWORD dwPageSize;
    LPVOID lpMinimumApplicationAddress;
    LPVOID lpMaximumApplicationAddress;
    DWORD dwActiveProcessorMask;
    DWORD dwNumberOfProcessors;
    DWORD dwProcessorType;
    DWORD dwAllocationGranularity;
    WORD wProcessorLevel;
    WORD wProcessorRevision;
} SYSTEM_INFO, *LPSYSTEM_INFO;

إليكم كيف قمت بتعيين كل شيء إلى التعليمات البرمجية المدارة:

[DllImport("rapi.dll")]
public static extern void CeGetSystemInfo([MarshalAs(UnmanagedType.Struct)]ref SYSTEM_INFO info);

[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO
{
       internal PROCESSOR_INFO_UNION uProcessorInfo;
       public uint dwPageSize;
       public IntPtr lpMinimumApplicationAddress;
       public IntPtr lpMaximumApplicationAddress;
       public uint dwActiveProcessorMask;
       public uint dwNumberOfProcessors;
       public uint dwProcessorType;
       public uint dwAllocationGranularity;
       public ushort wProcessorLevel;
       public ushort wProcessorRevision;
}

[StructLayout(LayoutKind.Explicit)]
public struct PROCESSOR_INFO_UNION
{
       [FieldOffset(0)]
       internal uint dwOemId;
       [FieldOffset(1)]
       internal ushort wProcessorArchitecture;
       [FieldOffset(2)]
       internal ushort wReserved;
}

عندما استدعاء الوظيفة تمر بتهمة system_info plact لا يحدث شيء. الوظيفة لا تغير قيم الهيكل بأي شكل من الأشكال. هل قمت بتعيين بنية خطأ أو شيء من هذا؟

شكرا مقدما

هل كانت مفيدة؟

المحلول

فهمتك!

يجب تهيئة RAPI.DLL من خلال استئناف وظيفة Cerapiinit ثم بعد كل مكالمات وظيفتك تحتاج إلى إغلاق RAPI عن طريق الاتصال Cerapiuinit

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top