C# 在Unity3d中使用的目标c API(保持对象方向)

C# 在Unity3d中使用的目标c API(保持对象方向),c#,objective-c,c,oop,wrapper,C#,Objective C,C,Oop,Wrapper,因此,我在objective-c中实现了一个API,我想在unity中使用它。这个任务的所有解决方案,从c#(unity)调用objective-c,我在这里找到的,都展示了如何使用中间c-wrapper在objective-c代码周围执行从c#到objective-c的简单调用,比如or。然而,这些简单的调用消除了objective-CAPI的面向对象特性 更确切地说,我的意思是,假设我的objective-c API中有一个类: @interface MyVector:NSObject -

因此,我在objective-c中实现了一个API,我想在unity中使用它。这个任务的所有解决方案,从c#(unity)调用objective-c,我在这里找到的,都展示了如何使用中间c-wrapper在objective-c代码周围执行从c#到objective-c的简单调用,比如or。然而,这些简单的调用消除了objective-CAPI的面向对象特性

更确切地说,我的意思是,假设我的objective-c API中有一个类:

@interface MyVector:NSObject 
-(MyVector*)crossProduct:(MyVector*);
@end
为了从c#code调用
crossProduct
方法(如上所述),一个可能的c-wrapper可能如下所示:

//say myVector_c is a c struct
extern "C" void crossProduct_c(myVector_c* v1, myVector_c* v2, myVector_c* v_result){

   MyVector* v1_objc=[[MyVector alloc] initWithx:v1.x andy:v1.y andz:v1.z];
   MyVector* v2_objc=[[MyVector alloc] initWithx:v2.x andy:v2.y andz:v2.z];
   MyVector* v_result_objc=[v1_objc crossProduct:v2_objc];

   v_result.x=v_result_obj.x;
   v_result.y=v_result_obj.y;
   v_result.z=v_result_obj.z;
}
这意味着为了使用unity、c#代码中的跨产品功能,一个(可能…)需要执行以下操作

using System.Runtime.InteropServices;
public class testScript : MonoBehaviour {
...
//import the myVector_c struct

[System.Runtime.InteropServices.DllImport("__Internal")]
extern static public void crossProduct_c(myVector_c*,myVector_c*,myVector_c*);

//and now (fingers crossed...) the cross product functionality is available through
//the crossProduct_c function

 }
现在这种方法对我来说既丑陋又多余。如果能够以更直接的方式访问
MyVector
对象及其在objective-c代码中已经实现的功能,那就太好了。我的意思是,以如下方式实现c包装器将非常好:

MyVector v1=new MyVector();
MyVector v2=new MyVector();
MyVector vResult=v1.crossProduct(v2);
class MyVector_csh{
   MyVector v;
   public MyVector_csh(){
      v=new MyVector();
   }
}
可以在C代码中工作,而无需从C-wrapper的“功能性”实现中重新实现C代码中的MyVector。我的意思是,如果你能在c#中做一些类似的事情:

MyVector v1=new MyVector();
MyVector v2=new MyVector();
MyVector vResult=v1.crossProduct(v2);
class MyVector_csh{
   MyVector v;
   public MyVector_csh(){
      v=new MyVector();
   }
}
或者类似的东西,但由于中间的c-wrapper,没有失去对象定向

<> P> >我在这里找到了一些方法,用C结构来封装C++代码中的C++代码,以模仿C++代码的对象定位。虽然我不能100%肯定自己理解这种方法,但在我看来,这将是一种更简洁的方法,可以将调用从c#“转发”到objective-c对象。不确定这样的方法如何以及是否能够在c代码中包装objective-c(而不是c++)


所以我的问题是,对于那些在混合不同语言方面比我更有经验的人(同时也是面向对象概念的崇拜者),如果这样的方法有意义,或者如果有人可以提出另一种方法,因为设计一种优雅的方式来处理c代码中的objective-c类,这几天对我来说已经是一件非常头疼的事了

我也遇到了同样的问题,如何在C#中使用ObjectiveC类,传递(必需的)C包装器。如果我找到一些解决方案,我会发布。