@H_502_3@
编辑:您可以使用不安全的代码…您只需手动编辑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); }
如果有人有更好的答案,那也很好.
@H_502_3@