当前位置: 首页 > news >正文

淄博周村网站建设哪家好百度人工申诉客服电话

淄博周村网站建设哪家好,百度人工申诉客服电话,建设工程信息官网查询系统,腐女喜欢做的网站上一篇文章中我使用UnrealSharp成功使用了我的一个C#控制台程序中的网络模块,这个程序是基于KCP网络了,其中调用了Cmake 编译的一个C的DLL,在虚幻中DLL需要放在Binaries目录中才可以。Unity中只要放在任意Plugins目录中就可以。 但是Binaries…

上一篇文章中我使用UnrealSharp成功使用了我的一个C#控制台程序中的网络模块,这个程序是基于KCP网络了,其中调用了Cmake 编译的一个C++的DLL,在虚幻中DLL需要放在Binaries目录中才可以。Unity中只要放在任意Plugins目录中就可以。
但是Binaries目录版本控制一般不提交,我们可以改一下,改成按照路径加载。

修改前的脚本

using System.Runtime.InteropServices;//脚本修改自//https://github.com/a11s/kcp_warppernamespace NetLibrary
{public unsafe class KCP{const string LIBNAME = "libikcp.dll";//---------------------------------------------------------------------// interface//---------------------------------------------------------------------/// <summary>/// create a new kcp control object, 'conv' must equal in two endpoint/// from the same connection. 'user' will be passed to the output callback/// output callback can be setup like this: 'kcp->output = my_udp_output'/// </summary>/// <param name="conv"></param>/// <param name="user"></param>/// <returns></returns>[DllImport(LIBNAME, EntryPoint = "ikcp_create", CallingConvention = CallingConvention.Cdecl)]public static extern IKCPCB* ikcp_create(uint conv, void* user);/// <summary>/// release kcp control object/// </summary>/// <param name="kcp"></param>[DllImport(LIBNAME, EntryPoint = "ikcp_release", CallingConvention = CallingConvention.Cdecl)]public static extern void ikcp_release(IKCPCB* kcp);/// <summary>/// set output callback, which will be invoked by kcp///public static extern void ikcp_setoutput(IKCPCB* kcp, int (* output)(byte* buf, int len,             ikcpcb *kcp, void* user));/// </summary>/// <param name="kcp"></param>/// <param name="d_output"></param>[DllImport(LIBNAME, EntryPoint = "ikcp_setoutput", CallingConvention = CallingConvention.Cdecl)]public static extern void ikcp_setoutput(IKCPCB* kcp, System.IntPtr d_output);

篇幅太大没有必要,只展示部分代码片段。
可以看到之前是通过DllImport 载入LIBNAME变量来载入DLL的。

改为动态路径

先放上所有改动

// 动态获取库路径
private static string GetLibraryPath()
{string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;//动态库的路径被拼接到 Binaries\Managed\Third\libikcp.dll,而你的实际库文件存放在 E:\myproject\Third\libikcp.dll,这说明 AppDomain.CurrentDomain.BaseDirectory 返回的路径是 Binaries\Managed。baseDirectory = Path.Combine(baseDirectory, "../../");string relativePath;// 根据平台选择库路径if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)){relativePath = "ThirdParty/Kcp/Win64/libikcp.dll";}else if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("ANDROID"))){relativePath = "ThirdParty/Kcp/Android/arm64-v8a/libikcp.so";}else{throw new PlatformNotSupportedException("Unsupported platform");}return Path.Combine(baseDirectory, relativePath);
}// DllImport 使用动态路径
private const string LIBNAME = "PLACEHOLDER"; // 占位符
private static bool _isResolverSet = false;
// 添加初始化方法以动态设置路径
public static void Initialize()
{if (_isResolverSet){Loger.Debug($"BSserver DLL: 已经加载过了 .");return;}try{string libraryPath = GetLibraryPath();//Loger.Error($"BSserver DLL:{libraryPath}");NativeLibrary.SetDllImportResolver(typeof(KCP).Assembly, (name, assembly, path) =>{if (name == LIBNAME){return NativeLibrary.Load(libraryPath);}return IntPtr.Zero;});_isResolverSet = true;}catch(Exception e) {//AClientMain.inst.PrintString("C# : DLL:" + libraryPath);Console.WriteLine($"Loaded library 加载错误 ."+e.Message);Loger.Error($"BSserver DLL 加载错误 : " + e.Message);}}
//const string LIBNAME = "libikcp.dll";
//---------------------------------------------------------------------
// interface
//---------------------------------------------------------------------/// <summary>
/// create a new kcp control object, 'conv' must equal in two endpoint
/// from the same connection. 'user' will be passed to the output callback
/// output callback can be setup like this: 'kcp->output = my_udp_output'
/// </summary>
/// <param name="conv"></param>
/// <param name="user"></param>
/// <returns></returns>
[DllImport(LIBNAME, EntryPoint = "ikcp_create", CallingConvention = CallingConvention.Cdecl)]
public static extern IKCPCB* ikcp_create(uint conv, void* user);/// <summary>
/// release kcp control object
/// </summary>
/// <param name="kcp"></param>
[DllImport(LIBNAME, EntryPoint = "ikcp_release", CallingConvention = CallingConvention.Cdecl)]
public static extern void ikcp_release(IKCPCB* kcp);

使用方法:
我们在UE的工程下创建目录ThirdParty,按照代码里的路径,把DLL放进去,按照不同平台。

在加载DLL之前,我们需要调用Initialize方法初始化动态设置路径就可以了。

这些代码是ChatGPT帮忙写的,经过几次修改有了这段代码。

小技巧

以前是内事不决问baidu,外事不决问google,现在是内事问豆包,外事问ChatGPT。 :)
但是小心AI一本正经的胡说八道。 :P

http://www.dinnco.com/news/33893.html

相关文章:

  • 保亭交通工程建设局网站换友情链接的网站
  • 广告模板网站有什么平台可以发布推广信息
  • vb 网站开发太原seo培训
  • 国外做建筑平面图的网站aso优化服务平台
  • 电子商务网站建设考试重点网络营销服务商有哪些
  • 个人做淘宝客网站有哪些优化教程网官网
  • 策划网站有哪些seoul是哪个国家
  • 网站建设中中文模板下载搜索引擎推广法
  • 如何做实体店的网站怎么制作网页设计
  • c2c模式的网站今日时事新闻
  • 长春好的做网站公司有哪些免费推广app软件下载
  • 做博客的网站有哪些功能深企在线
  • 网上做网站广告投放站长网
  • 做网站 广告 备案seo免费优化网站
  • 网站开发用哪种语言今日足球赛事数据
  • 如何做游戏网站今日实时热点新闻事件
  • 公司网站建设怎么选择网站提交入口大全
  • 许昌做网站公司汉狮价格谷歌搜索引擎网页版入口
  • 自己做的视频可以传别的网站去吗百度怎么做推广和宣传
  • 建设公司营销网站软文写作发布
  • 传奇网站劫持怎么做国内seo排名分析主要针对百度
  • 东城区住房和建设委员会网站seo软件优化工具软件
  • linux版网站开发东莞seo网络推广专
  • 网站建设公司 石景山app开发流程
  • joomla 多语言网站企业邮箱怎么申请
  • 淄川区住房和城乡建设局网站网络营销的新特点
  • 网站的做网站公司哪家好外贸seo软文发布平台
  • 太原如何做百度的网站关键词优化哪个好
  • 北京专业网站建设公司软文营销文章
  • 国家电网 党风廉政建设网站谷歌seo和百度seo