Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

472
Visualizações
Envoltorio C++/CLI para código C/C++ nativo, no se puede cargar en Unity3D

He estado buscando y buscando por toda la red sobre cómo cargar un ensamblado en Unity3D, y me está costando mucho. Lo siento si esta publicación será larga, pero estaré poniendo todo lo que he aprendido y hasta dónde he llegado, ya que es la primera vez que trabajo en .net y dlls.

Tengo un dll nativo, tiene un montón de "C" externas para que pueda cargar todo en tiempo de ejecución. Esto funciona en la unidad si uso el atributo [DLLImport] y tal. Sin embargo, es un código engorroso y no realmente reutilizable. Sería aún más engorroso más adelante cuando tenga que abstraer mi sistema entre más de 1 biblioteca nativa.

Así que pensé en hacer un contenedor C+++/CLI y luego cargarlo en Unity3d como cualquier otro dll y simplemente vincular el espacio de nombres: "using MyWrapper;"

Creé la librería C++/CLI más simple que se me ocurrió. todo lo que hace mi lib es tener una clase (Class1) y tiene una función int getnum() {return 5;}. Estoy usando VC ++ 2010 express, y estoy compilando con V90, y modifiqué el archivo vcxproj para apuntar a 2.0. Sé que la unidad solo es compatible con 2.0. Estoy construyendo en /clr para poder tener código nativo y .net.

Se cuelga completamente unity3d. Este es mi registro de errores en GameManager.Awake () [0x0001d] en Manager\GameManager.cs:116 en GameManager.Awake () [0x00000] en Manager\GameManager.cs:107 en (wrapper runtime-invoke) GUIRadioButton.runtime_invoke_void ( object,intptr,intptr,intptr) <0xffffffff> Recibiendo una excepción NULL no controlada

si lo construyo en /clr:safe en su lugar, funciona bien. /clr:pure tampoco funciona.

Así que decidí hacer un proyecto de línea de comandos externo de C# para probar todo. Cargo mi lib y compilo en 2.0 y /clr (modo mixto) funciona sin problemas.

Estoy usando Unity 2.6 Pro.

Es posible que lo que estoy buscando hacer sea imposible, no lo sé... Quiero decir, pensé que de eso se trataba .NET. Solo quiero tener un sistema que pueda reutilizarse en otros proyectos (C++).

Gracias por cualquier idea.

Aquí está mi proyecto de prueba 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;} }; }

Cuando creo un proyecto de línea de comandos de C# como este. funciona.

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

Ejecutar esta línea en Unity3d bloquea todo el editor. (Sí, puse la declaración de uso)

 Class1 c = new Class1();
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

AFAIK, los ensamblajes C++/CLI no funcionan con Unity, ya que Unity depende de Mono que no admite ensamblajes mixtos. La única solución es llamar a funciones desde un dll con el clásico p/invoke

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda