Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 5中Marshal.ptrto结构的pInvoke Win32函数_Silverlight_Winapi_Pinvoke_Silverlight 5.0 - Fatal编程技术网

Silverlight 5中Marshal.ptrto结构的pInvoke Win32函数

Silverlight 5中Marshal.ptrto结构的pInvoke Win32函数,silverlight,winapi,pinvoke,silverlight-5.0,Silverlight,Winapi,Pinvoke,Silverlight 5.0,我曾经 以 public static Object PtrToStructure( IntPtr ptr, Type structureType ) 用于在.net 4.0中封送数据。Silverlight不支持此方法。根据下面的文章,.net方法只是本机win32函数的包装器。给出了Marshal.AllocHGlobal(来自Kernel32.dll的Win32 LocalAlloc函数)的示例 这些都是新的领域,因为SL5刚刚为受信任的应用程序启用了pInvoke(在浏览器中也是如此

我曾经

public static Object PtrToStructure(
IntPtr ptr,
Type structureType
)
用于在.net 4.0中封送数据。Silverlight不支持此方法。根据下面的文章,.net方法只是本机win32函数的包装器。给出了Marshal.AllocHGlobal(来自Kernel32.dll的Win32 LocalAlloc函数)的示例


这些都是新的领域,因为SL5刚刚为受信任的应用程序启用了pInvoke(在浏览器中也是如此)。PtrToStructure包装的win32函数是什么?有什么东西阻止在SL5中使用它吗?

使用您选择的反编译器,您将能够看到
PtrToStructure(IntPtr,Type)
确实是在Silverlight 5的mscorlib.dll程序集中实现的:

private static object ReadStruct(byte[] buffer, Type t)
{
    GCHandle handle =
        GCHandle.Alloc(buffer,
        GCHandleType.Pinned);
    Object temp =
        Marshal.PtrToStructure(
        handle.AddrOfPinnedObject(),
        t);
    handle.Free();
    return temp;
}
属于
内部
,但其他组件无法访问它
PtrToStructure
依次调用以下方法:

[SecurityCritical]
[ComVisible(true)]
[FriendAccessAllowed]
internal static object PtrToStructure(IntPtr ptr, Type structureType)
它是在公共语言运行库中实现的


我无法识别
PtrToStructureHelper
调用的win32函数。但是,由于
PtrToStructure
方法持有
[SecurityCritical]
属性,因此对这些win32函数的Silverlight P/Invoke调用如果被识别,很可能会导致安全异常。

使用您选择的反编译器,您将能够看到

PtrToStructure(IntPtr,Type)
确实是在Silverlight 5的mscorlib.dll程序集中实现的:

private static object ReadStruct(byte[] buffer, Type t)
{
    GCHandle handle =
        GCHandle.Alloc(buffer,
        GCHandleType.Pinned);
    Object temp =
        Marshal.PtrToStructure(
        handle.AddrOfPinnedObject(),
        t);
    handle.Free();
    return temp;
}
属于
内部
,但其他组件无法访问它
PtrToStructure
依次调用以下方法:

[SecurityCritical]
[ComVisible(true)]
[FriendAccessAllowed]
internal static object PtrToStructure(IntPtr ptr, Type structureType)
它是在公共语言运行库中实现的


我无法识别
PtrToStructureHelper
调用的win32函数。但是,由于
PtrToStructure
方法持有
[SecurityCritical]
属性,因此很可能Silverlight P/Invoke调用了这些win32函数(如果已识别),将导致安全异常。

很难想象普通Win32函数如何合成.net对象。很难想象普通Win32函数如何合成.net对象。感谢您的解释。最后,我使用BitConverter重新创建了这个结构,正如我最初用[StructLayout(LayoutKind.Sequential,Pack=1)]装饰它一样,谢谢您的解释。我最终使用BitConverter重新创建了该结构,正如我最初使用[StructLayout(LayoutKind.Sequential,Pack=1)]装饰它一样