c#调用dll,函数返回值为自定义的C++接口指针,如何在C#中定义函数返回值,并调用该接口提供的各个函数?
c++中定义的类,需要再到c#中重新定义吗?接口的返回值是c++中定义的一个类,该类只有纯虚函数,即为接口。那么在c#中如何获得还接口指针,并能通过该指针调用接口类中的函...
c++中定义的类,需要再到c#中重新定义吗?
接口的返回值是c++中定义的一个类,该类只有纯虚函数,即为接口。那么在c#中如何获得还接口指针,并能通过该指针调用接口类中的函数?
跪求! 展开
接口的返回值是c++中定义的一个类,该类只有纯虚函数,即为接口。那么在c#中如何获得还接口指针,并能通过该指针调用接口类中的函数?
跪求! 展开
1个回答
展开全部
类是没有办法,结构体还行。
我原来回答过的一个类似的问题,楼主参考一下:
其实对于dll来说,类的动太导出一直是一个难题。我早先由于项目需要,也了解过一些这方面的知识,最后还是放弃了。
后来我想到了一个方法。
类的实例通过指针传出来,然后在类的基础上再封装一层,每个公开的函数都封一个函数,参数表里直接把创建的类的指针给传进去,在dll内部再调相应的方法。
楼主不妨也这样试一下。
比如: g()这个函数,就返回一个IntPtr。这个指针就是在dll中创建对象的指针,但在C#里不具体的把它分出来是张三还是王二。dll中增加调用a的函数add的全局导出函数 add2(void*) 然后在add2的函数体内对指针进行转化后再调其add方法。
有点迂回敌后的感觉。
还有,既然需要用C#来调用,dll也可以写成托管的,只要加上运行时支持就好了。那样的类声明加个partal,然后直接添加引用就能象用c#的dll一样用了,这个多方便啊?我还试了一个mirror驱动的,封成了托管DLL,也一样好用。楼主也可以考虑一下。
我原来回答过的一个类似的问题,楼主参考一下:
其实对于dll来说,类的动太导出一直是一个难题。我早先由于项目需要,也了解过一些这方面的知识,最后还是放弃了。
后来我想到了一个方法。
类的实例通过指针传出来,然后在类的基础上再封装一层,每个公开的函数都封一个函数,参数表里直接把创建的类的指针给传进去,在dll内部再调相应的方法。
楼主不妨也这样试一下。
比如: g()这个函数,就返回一个IntPtr。这个指针就是在dll中创建对象的指针,但在C#里不具体的把它分出来是张三还是王二。dll中增加调用a的函数add的全局导出函数 add2(void*) 然后在add2的函数体内对指针进行转化后再调其add方法。
有点迂回敌后的感觉。
还有,既然需要用C#来调用,dll也可以写成托管的,只要加上运行时支持就好了。那样的类声明加个partal,然后直接添加引用就能象用c#的dll一样用了,这个多方便啊?我还试了一个mirror驱动的,封成了托管DLL,也一样好用。楼主也可以考虑一下。
追问
这个我也想过,就是把接口再包装一下。
不过,这些DLL是别人已经做好的,主要是提供给c++等调用的。我只想用c#做界面,用这些dll的逻辑功能而已,如果在对这些DLL再做一些封装,感觉还是麻烦了。想走一些捷径,看了有些困难了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询