簡體   English   中英

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

[英]Windows Phone 8(WP8) C# unsafe code?

編輯:您可以使用不安全的代碼...您只需手動編輯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, ptr, 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);
}

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

這正是C ++ / CX要解決的問題(同時保持沙箱的完整性)。

例如,要將C#中的int數組傳遞給C ++,請在C ++ / CX ref類或接口定義中使用Platform::Array<int> 查看MSDN以了解如何使用此類型的具體信息。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM