Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用不安全的代码统一 我想用C++语言中的C++代码来统一使用CLR._C#_C++_Unity3d_Clr_Unsafe - Fatal编程技术网

C# 如何使用不安全的代码统一 我想用C++语言中的C++代码来统一使用CLR.

C# 如何使用不安全的代码统一 我想用C++语言中的C++代码来统一使用CLR.,c#,c++,unity3d,clr,unsafe,C#,C++,Unity3d,Clr,Unsafe,程序在unity外部正常工作,但在引擎内部它给我一个错误: “cs0227:不安全代码要求指定'unsafe'命令行选项” 我真的很困惑,因为项目在VisualStudio中成功构建(没有任何错误或警告)。我已激活“允许不安全”按钮 using UnityEngine; using System.Collections; using System; using System.Collections.Generic; using System.Linq; using System.Text; us

程序在unity外部正常工作,但在引擎内部它给我一个错误:
“cs0227:不安全代码要求指定'unsafe'命令行选项”

我真的很困惑,因为项目在VisualStudio中成功构建(没有任何错误或警告)。我已激活“允许不安全”按钮

using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


public class newspawn_real : MonoBehaviour {

void Start () {

    unsafe
        {

            fixed (int * p = &bam[0, 0, 0])
            {
                CppWrapper.CppWrapperClass controlCpp = new CppWrapper.CppWrapperClass();

                controlCpp.allocate_both();
                controlCpp.fill_both();
                controlCpp.fill_wrapper();
}

您必须明确启用Unity中的
不安全
代码。您可以按照以下步骤操作:

1。第一步,将Api兼容性级别更改为.NET 2.0子集

2。在
/Assets
目录中创建一个文件,并将其命名为smcs.rsp,然后将
-unsafe
放入该文件中。保存并关闭该文件

关闭并重新打开Visual Studio和Unity。您必须同时重新启动它们

值得注意的是,即使这样做并重新启动Unity和Visual Studio,但问题仍然存在,smcs.rsp文件仍将保存到csc.rsp,或gmcs.rsp并每次重新启动,直到找到一个有效的文件。尽管如此,smcs.rsp还是应该第一次这样做

在此之后编译的简单C#不安全代码

public class newspawn_real : MonoBehaviour
{
    unsafe static void SquarePtrParam(int* p)
    {
        *p *= *p;
    }

    void Start()
    {
        unsafe
        {
            int i = 5;
            // Unsafe method: uses address-of operator (&):
            SquarePtrParam(&i);
            Debug.Log(i);
        }
    }
}
编辑:


对于最新的Unity版本,文件名应为mcs.rsp。其他一切都是一样的。

如果有什么不清楚的地方,请告诉我,我会纠正它。由于Unity是一个黑匣子,我们真的不知道代码转换时支持哪些C#功能。粗略猜测是不安全的,但事实并非如此。您是否考虑过使用
封送处理
类方法?您是指dll导入吗[DllImport(“C++unitshi.dll”)“静态外部内部添加(inta,intb);”不,我指的是所有的指针类型和指针算法,他们当然必须为web播放器划一条线。但似乎@Programmer answer允许您这样做。非常感谢!这是地球上最好的论坛。值得注意的是,我们应该使用smcs.rsp(用于.Net 2.0子集)或gmcs.rsp(用于.Net 2.0)