Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CppSharp自动生成C++的绑定代码 #218

Closed
jz315 opened this issue Jul 17, 2023 · 3 comments
Closed

CppSharp自动生成C++的绑定代码 #218

jz315 opened this issue Jul 17, 2023 · 3 comments

Comments

@jz315
Copy link

jz315 commented Jul 17, 2023

https://github.com/mono/CppSharp
这个库只需要提供头文件和.lib文件就可以自动生成绑定代码

源码的
Engine\Intermediate\Build\Win64\UnrealEditor\Inc\ 文件夹下有UHT生成的反射文件
Engine\Intermediate\Build\Win64\x64 文件夹下是编译模块时的宏
Engine\Binaries\Win64里的dll导出成lib就可以用了
再把DllImport改成MethodImplOptions.InternalCall应该就能用

CppSharp是一个C#的库,功能很强大,就是教程有点少,只有几篇官方文档
https://github.com/mono/CppSharp/tree/main/docs
也没有对所有API介绍,有些函数只能自己猜
可能对一些复杂的模板类不能导出

我还看到虚幻还可以将整个引擎导出成一个库
在C#就可以启动UE,但也不是很好用,而且只支持Windows平台
https://docs.unrealengine.com/5.2/zh-CN/building-unreal-engine-as-a-library/
实际导出后发现dll没有export所有函数,只有文档里的4个内置api
查看UBT的Definination发现导出时没有将XXX_API宏define为DLLEXPORT
请问大佬知道怎么才能导出函数吗

最近的.Net7 新增的NativeAOT可以将C#代码导出为C++可以调用的DLL,唯一的缺点是只能导出static函数

@crazytuzi
Copy link
Owner

感谢思路。这个库我之前也有了解过,没有采用的原因是借助第三方库的时候,可操作性和灵活性就会因此降低,也会带来一些新的问题,比如如何按需导出,如何分别导出反射类型和非反射类型等。
关于Building Unreal Engine as a Library,官方只提供了Windows下的实现,Android和IOS需要自己去实现(这块QQ做好了,以及了解到有另外一个公司也做了这件事情),所以这套方案成本较高。
*_API这个可以参考[模块的宏定义
NativeAOT,在不借助此的情况下,通过反射已经达到比较好的效果。

@ODtian
Copy link

ODtian commented Mar 30, 2024

这个库可以导出一些简单模板吗,虚幻一些模块模板函数还是挺多的,不过都是一些简单模板

@crazytuzi
Copy link
Owner

这个库可以导出一些简单模板吗,虚幻一些模块模板函数还是挺多的,不过都是一些简单模板

需要手写胶水代码,以及提前展开,不是很方便

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants