开始cpp文件,相关逻辑,include引用,相关的头文件; 窗体信息相关,先设置nullptr空指针,参考[[nullptr]]; 在Core的构造函数中,设置一下字体,是微软雅黑;
![[Pasted image 20240801205242.png]]
获取窗口标题的getWindowTitle函数实现,根据[[qt HWND]]拿到对应的标题;
![[Pasted image 20240801205711.png]]
设置一个TagWNDINFO结构体,用在EnumProc全局函数,枚举窗口,判断是否为重复窗体;
![[Pasted image 20240801205805.png]]
全局函数GetProcessMainWnd,是配合[[GetCurrentProcessId]]获取主窗体相关;
![[Pasted image 20240801205941.png]]
继续,全局函数CustomWndProc,是根据,不同的窗体case操作,emit触发,不同的信号,后续用于窗口遮罩居中相关
![[Pasted image 20240801210109.png]]
以上,完成了各种全局函数; 对应的initHWND初始化窗体相关,通过枚举窗体,调用主窗体,完成窗体的初始化即可;
![[Pasted image 20240801210336.png]]
instanceCount函数实现,后续是通过,unity端,传参过来设定最大的实例化sdk个数,对qt子进程数量,进行限制;
![[Pasted image 20240801210518.png]]
quit函数,就是退出qt子进程相关,对相关变量,完成清理;
![[Pasted image 20240801210707.png]]
result函数,是把一个json结构体的数据,传参回给unity回调,参考[[C++ strcpy_s的详细用法]]
![[Pasted image 20240801211200.png]]
success和error,分别是成功和失败的回调,都是调用上述的result函数;
![[Pasted image 20240801211350.png]]
init初始化函数实现,先通过initHWND函数,判断窗体初始化,是否正常,然后通过传参过来的json数据体,拿到最大的实例数量限制,进行判断,是否正常; 进而调用,success或者error回调;
![[Pasted image 20240801211531.png]]
invoke触发函数,是通过传参判断,是否为init初始化,通过switch和case的方式,调用对应init初始化函数,还是调用,对应的quit退出函数;
![[Pasted image 20240802111908.png]] 右键选择,添加新文件;
![[Pasted image 20240802111604.png]]
选择只创建cpp即可;
![[Pasted image 20240802111636.png]]
是主函数入口,命名为main.cpp;
![[Pasted image 20240803153143.png]]
主函数的入口,是DllMain相关逻辑,还有一个Invoke触发函数的导出,在Unity端可以调用,参考[[dllexport与dllimport的区别]];
![[Pasted image 20240802112240.png]]
之前在创建项目的时候,有默认创建dll和一个global相关的文件,没有使用到,直接删除即可,删除后,头文件和源文件,目录如下:
![[Pasted image 20240802112558.png]]
回到.pro项目文件,之前是配置了,debug和release的输出目录;
![[Pasted image 20240802112453.png]]
先修改项目设置,不让其进行默认编译
![[Pasted image 20240803153242.png]]
取消勾选
![[Pasted image 20240803153255.png]]
确认是Release编译,然后点击构建;
![[Pasted image 20240802112701.png]]
会有警告,但是编译成功;
![[Pasted image 20240802112748.png]]
编译目录,也是跟.pro项目配置一致; 但这只是最基础的编译结果,它对应的依赖,还需要加进来;
![[Pasted image 20240803153426.png]]
根据首字母开头,找到qt对应编译器的,命令行模式,这里也是64位;
![[Pasted image 20240802145428.png]]
复制所在路径
![[Pasted image 20240803153444.png]]
cd 到这个路径,回车
![[Pasted image 20240803153520.png]]
可以看到,还是在原路径
![[Pasted image 20240803153557.png]]
敲击对应的盘符,回车即可,例如这里是在G盘:G:
![[Pasted image 20240803153626.png]]
就自动跳转到,对应的路径了
![[Pasted image 20240803153642.png]]
windeployqt 指令,是可以自动检索出,qt相关的依赖文件,不管是exe还是dll都可以的,参考[[Qt库依赖的打包路径]],这里是dll文件,tab补全名字即可,回车;
![[Pasted image 20240803153712.png]]
自动检索完毕
![[Pasted image 20240803153731.png]]
路径文件目录,也正常
![[Pasted image 20240803153801.png]]