C# 如何使用不安全的代码统一 我想用C++语言中的C++代码来统一使用CLR.
程序在unity外部正常工作,但在引擎内部它给我一个错误: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
“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)