编辑:你可以使用不安全的代码......你只需手动编辑proj文件。
当我可以在手机上使用本机C ++代码时,为什么或为什么WP8上的C#不支持不安全的代码(我没想到这一点)?我的意思是狡猾的,我对微软试图迫使C#进入的目标感到非常失望。
有没有MS计划将来支持WP8?我将着色器常量从C#传递给C ++,并使用不安全的代码来优化这个过程,但是在WP8上,我会被迫在速度较慢的设备上以较慢的方式执行此操作而不是PC,这使得这非常令人沮丧。 / p>
作为将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, ptr, size);
}
在没有不安全的代码的情况下,任何人都有一个很好的快速方法吗?
答案 0 :(得分:1)
我找到了解决方案。
对于简单的矢量类型,只需:
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);
}
如果有人有更好的答案,那也很好。
答案 1 :(得分:0)
这正是C ++ / CX要解决的问题(同时保持沙盒的完整性)。
例如,要将C#中的int数组传递给C ++,请在C ++ / CX ref类或接口定义中使用Platform::Array<int>
。查看MSDN以了解如何使用此类型的具体信息。
(http://msdn.microsoft.com/en-us/library/windows/apps/hh700131.aspx)