Edg*_*nte 6 c# dll clr c++-cli unity-game-engine
我一直在寻找并在网上查看如何在Unity3D中加载程序集,我真的很难过.我很抱歉,如果这篇文章很长,但我会把我学到的所有内容和我已经学到的东西,因为这是我第一次在.net和dll工作.
我有一个原生的dll,它有一大堆extern"C",所以我可以在运行时加载所有东西.如果我使用[DLLImport]属性等,这将统一工作.但是,它很麻烦,而且不是真正可重用的代码.当我不得不在多个本地库之间抽象我的系统时,它会变得更加麻烦.
所以我想我会做一个C+++/CLI包装器,然后像任何其他dll一样加载它在Unity3d中,只需链接命名空间:"使用MyWrapper;"
我创建了我能想到的最简单的C++/CLI库.我所有的lib都有一个类(Class1),它有一个函数int getnum(){return 5;}.我正在使用VC++ 2010 express,我正在使用V90构建,并将vcxproj文件修改为目标2.0.我知道团结只支持2.0.我正在/ clr中构建,以便能够拥有本机和.net代码.
它完全崩溃了unity3d.这是我在Manager\GameManager.cs中的GameManager.Awake()[0x0001d]的错误日志:116.在Manager\GameManager.cs中的GameManager.Awake()[0x00000]:107(包装器运行时调用)GUIRadioButton.runtime_invoke_void( object,intptr,intptr,intptr)<0xffffffff>接收未处理的NULL异常
如果我在/ clr:safe中构建它,那么它可以正常工作./ clr:纯也不起作用.
所以我决定做一个外部的c#命令行项目来测试一切.我加载我的lib,并在2.0和/ clr(混合模式)编译工作没有问题.
我正在使用Unity 2.6 Pro.
可能我想做的事情是不可能的,我不知道......我的意思是我认为这就是.NET的全部内容.我只想拥有一个可以在其他项目中重用的系统(C++).
感谢您的任何见解.
这是我的测试c ++/cli项目.
#pragma once
using namespace System;
namespace CLRTest {
public ref class Class1
{
// TODO: Add your methods for this class here.
public:
Class1(){}
int getnum (){return 5;}
};
}
Run Code Online (Sandbox Code Playgroud)
当我像这样创建一个C#命令行项目时.有用.
using System;
using System.Collections.Generic;
using System.Text;
using CLRTest;
namespace CLRTestLoad
{
class Program
{
static void Main(string[] args)
{
Class1 c = new Class1();
Console.WriteLine ("num is = " + c.getnum());
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Unity3d中执行此行会导致整个编辑器崩溃.(是的,我确实加入了使用声明)
Class1 c = new Class1();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4378 次 |
| 最近记录: |