4

编辑:您可以使用不安全的代码...您只需手动编辑 proj 文件。

当我可以在手机上使用本机 C++ 代码时,为什么或为什么 WP8 上的 C# 不支持不安全代码(我没想到会这样)?我的意思是 rly 来吧,我对微软试图强迫 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, ptr, size);
}

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

4

2 回答 2

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);
}

如果有人有更好的答案,那也很高兴知道。

于 2013-01-21T06:10:01.217 回答
0

这正是 C++/CX 需要解决的问题(同时保持沙箱的完整性)。

例如,将 int 数组从 C# 传递到 C++ Platform::Array<int>,在 C++/CX ref 类或接口定义中使用。查看 MSDN 以了解如何使用此类型的详细信息。

( http://msdn.microsoft.com/en-us/library/windows/apps/hh700131.aspx )

于 2013-01-21T07:19:55.377 回答