加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows Phone 8(WP8)C#不安全代码?

发布时间:2020-12-14 05:41:52 所属栏目:Windows 来源:网络整理
导读:编辑:您可以使用不安全的代码…您只需手动编辑proj文件. 当我可以在手机上使用本机C代码时,为什么或为什么WP8上的C#不支持不安全的代码(我没想到这一点)?我的意思是狡猾的,我对微软试图迫使C#进入的方式感到失望. 有没有MS计划在WP8上支持这个?我将着色器
编辑:您可以使用不安全的代码…您只需手动编辑proj文件.

当我可以在手机上使用本机C代码时,为什么或为什么WP8上的C#不支持不安全的代码(我没想到这一点)?我的意思是狡猾的,我对微软试图迫使C#进入的方式感到失望.

有没有MS计划在WP8上支持这个?我将着色器常量从C#传递给C并使用不安全的代码来优化这个过程,但是在WP8上,我会被迫以较慢的速度在一台速度较慢的设备上与PC相比,这让人非常沮丧.

作为将vector4传递给C的示例,我会这样做:

public unsafe void Set(Vector4 value)
{
    com.Set((int)&value,sizeof(Vector4));
}

然后在C:

void ShaderVariableCom::Set(__int32 data,int size)
{
    void* ptr = (void*)data;
    if (vertexOffset != -1) memcpy(vertexBytes + vertexOffset,ptr,size);
    if (pixelOffset != -1) memcpy(pixelBytes + pixelOffset,size);
}

没有不安全的代码,任何人都有一个很好的快速方法吗?

解决方法

我找到了解决方案.

对于简单的矢量类型,只需:

Marshal.StructureToPtr(vector,nativePtr,false);

对于数组做:

var data = new Vector[10];
int size = Marshal.SizeOf(data[0]);
for (int i = 0; i != data.Length; ++i)
{
    Marshal.StructureToPtr(data[i],nativePtr + (size * i),false);
}

如果有人有更好的答案,那也很好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读