免费国产网站_秋霞午夜一区二区三区视频_99热在线看_日韩精品久久一区二区_午夜看一级毛片_天天鲁在视频在线观看

  • 您的位置:首頁 > 新聞動態 > UE4

    虛幻UE4如何鏈接第三方庫(lib和dll)

    2018/3/20??????點擊:
    摘要:寫這個文章主要是被UE官方的wiki和answerhub誤導了很久,這本來是一個很常見和基本的問題,但是無論是官方的wiki或者是論壇上的提問都十分散亂并且充斥各種錯誤,因此記錄下這個在開發中時常遇到的問題。
    在開發中經常遇到的問題就是加入某第三方庫的支持,這樣的第三方庫往往屬于無源碼,而且可能是靜態lib或者是動態dll甚至兩者皆有。UE4的編譯管理用的是自己的UBT(unreal binary tool)因此鏈接第三方庫的工作主要是編寫UBT腳本。
    1.以插件方式集成.
    基本上這個是*推薦的集成第三方庫的方式,因為能夠很好的隔離你的代碼和第三方代碼的影響,在UE4的源碼里也可以看到很多第三方庫都是這么集成的,比如paper2D,leapmotion等等。在UE4中新建插件的方式略去不表,當你新建完你的插件之后,你會在插件的代碼目錄下看到一個
    xxx.build.cs
    接下來要做的就是修改這個腳本:
    得到當前路徑
    1. private string ModulePath
    2. {
    3.    get { return ModuleDirectory; }
    4. }
    關于第三方庫放的位置,一般是在plugin的源碼同級文件夾下建一個ThirdParty文件夾,里面放上include lib等等
    。得到ThirdParty文件夾的路徑
    1. private string ThirdPartyPath
    2. {
    3.         get { return Path.GetFullPath(Path.Combine(ModulePath,"../../ThirdParty/")); }
    4. }
    為工程添加include第三方庫的頭文件路徑
    在模快的構造函數里加上:
    1. PublicIncludePaths.AddRange(
    2.         new string[] { 
    3.              Path.Combine(ThirdPartyPath, "xxx", "Include"),
    4.         }
    5.         );
    6.             
    7.  
    8. PrivateIncludePaths.AddRange(
    9.         new string[] {
    10.             Path.Combine(ThirdPartyPath, "Foxit", "Include"),
    11.         }
    12.         );
    鏈接第三方庫的Lib
    接下來需要在編譯工程時加入第三方靜態庫的鏈接,靜態鏈接屬于工程在編譯期間做的事情,因此這塊需要通過cs腳本完成,而dll動態鏈接庫的加載是運行期的事,因此需要在cpp文件中執行。
    我們新建一個叫LoadxxxLib的函數,并把它放在模塊的構造函數結尾執行:
    1. public bool LoadxxxLib(TargetInfo Target)
    2.     {
    3.         bool isLibararySupported = false;
    4.         if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))
    5.         {
    6.             isLibararySupported = true;
    7.             string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "Win64" : "Win32";
    8.             PublicAdditionalLibraries.Add(Path.Combine(LibraryPath, PlatformString + ".lib"));
    9.             PublicDelayLoadDLLs.Add(PlatformString + ".dll");
    10.             RuntimeDependencies.Add(new RuntimeDependency(LibraryPath + PlatformString + ".dll"));
    11.         }
    12.         return isLibararySupported;
    13.     }

    這樣就可以保證在編譯期鏈接上我們的第三方lib。


    鏈接動態DLL
    這個工作需要在plugin的運行期完成,在插件的source文件下找到一個與插件名字同名的cpp文件打開。會看到一個StartupModule的函數,我們需要在這里得到dll文件的handle。

    在StartupModule中添加下面的代碼:

    1. void FXXXModule::StartupModule()
    2. {
    3. #if PLATFORM_64BITS
    4.     FString platform = TEXT("win64.dll");
    5. #else
    6.     FString platform = TEXT("win32.dll");
    7. #endif
    8.     FString path = IPluginManager::Get().FindPlugin("XXX")->GetBaseDir(); 
    9.     FString dllpath = path + "/ThirdParty/XXX/Lib/" + platform;
    10.     PdfDllHandle = FPlatformProcess::GetDllHandle(*dllpath);
    11.     if (!PdfDllHandle)
    12.     {
    13.         UE_LOG(LogTemp, Warning, TEXT("Failed to load PDF library."));
    14.     }
    15. }
    這里我們用的是PluginManager找到的插件所在的路徑,值得注意的是使用這個函數時需要在build.cs中加入
    1. PrivateDependencyModuleNames.AddRange(
    2.             new string[]
    3.             {
    4.                 ...
    5.                 "Projects",
    6.             }
    7.             );

    否則工程會鏈接出錯。


    主站蜘蛛池模板: 在线观看亚洲精品国产福利片_欧洲极品少妇_麻豆tv在线看_亚洲大片_2018日日夜夜操_色老大久久综合网天天 | 四虎影院在线免费_日韩中文字幕第一页_国产午夜激无码av毛片护士_无码日韩做暖暖大全免费不卡_免费啪啪网_久久国产中文 | 大菠萝福利网_鲁鲁夜夜天天综合视频_2019亚洲日韩新视频_国户精品久久久久久久久久久不卡_青青在线免费视频_伦伦影院午夜理论片 亚洲成年人专区_91麻豆欧美成人精品_五月天婷亚洲天综合网精品偷_精品乱码久久久久久_国产人妖在线视频_九九热re日本精品 | 日本看黄网站_国产精品你懂的_草草影院最新_XXX性XXX国语对白_国产在线观看免费_中文字幕日本一区 | 久久综合精品一区_精品亚洲一区二区三区四区五区_国产亚洲人成无码网在线观看_国产乱淫av免费观看_久久久噜噜噜久噜久久综合_日韩三级av | 日本婷婷_精品国产999久久久免费_日本五区在线不卡精品_A片免费观看一区二区三区_日韩小视频在线_色欲麻豆国产福利精品 | 美女免费精品高清毛片在线视_黄色影视大全_国产免费传媒av片在线_丰满熟妇岳av无码区_亚洲三级成人_亚洲精品视频91 | 91视频在线观看大全_亚洲狠狠狠_亚洲777理论_久久精品国产亚洲AV麻豆网站_精品国产乱码久久久久久1区2区_国产女爽爽视频精品免费 | 男人女人双性人人妖太监_91综合网_精品人妻潮喷久久久又裸又黄_2017日本三级_91精产品一区一区三区40p_色婷婷综合和线在线 | 给我看免费播放的视频_国产一级a爱片在线观看视_欧美精品一区二区三区一线天视频_成人日韩视频_好吊妞视频在线观看_caoni视频 | 97午夜剧场_国产免费激情_日本国产在线播放_久久亚洲春色中文字幕久久久_日韩首页_日本国产精品无码字幕在线观看 | 水蜜桃一三三三区_伦伦影院欧美伦理_无码人妻天天拍夜夜爽_插逼毛片_国产熟女露脸大叫高潮_日韩一级免费 | 九九视频网_久久国产日本_男人的天堂色欲网HTTP_亚洲大尺度专区无码浪潮AV_亚洲欧美日韩国产综合一区二区_欧美日韩视频无码一区二区三 | 天天拍夜夜拍_MM1313亚洲精品无码_麻豆精品导航_国产福利91精品一区_亚洲v片在线观看_亚洲龙腾成小说人网 | 9久热久爱免费精品视频在线_中日韩免费毛片_91小视频在线播放_国产精品一v二v在线观看_911国产影院在线观看_日本精品中文字幕在线播放 | 嘿咻嘿咻成人免费视频播放_91成人免费在线视频_搡老女人老91妇女老熟女o_国产AV无码专区亚洲AV中文_天天爽亚洲中文字幕_国产精品丝袜 | 人人av在线_五月天狠狠操_久久中文字幕高清_精品国产一区二区三区四区vr_摊牌了我的五个哥哥是大佬短剧免费观看_日本成人区 | 国产美女亚洲精品久久久久_亚洲欧美综合在线精品_日本欧美一级片_国产女人免费看a级丨片_性迷宫1999法国_av午夜久久蜜桃传媒软件 | 国产免费无遮挡在线观看视频_在线观看视频二区_中文字幕第十一页_国产精品成人片在线观看_www.91成人_国产成人亚洲综合色婷婷秒播 | 成人3p_91精品国产综合久久久久久久_成人免费看WWW网址入口_天堂网资源中文最新版_丰满妇女强制高潮18XXXX_国产精品99久久久久宅男软件功能 | 这里只有久久精品_超碰最新网址_日韩成人在线观看_国产AV人人夜夜澡人人爽_国农村精品国产自线拍_五月婷六月丁香狠狠躁狠狠爱 | 九热这里只有精品_唐安琪扒开腿让男人桶_欧美一区二区三区大片_小俊大肉大捧一进一出好爽_欧美自拍一区_学生妹亚洲一区二区 | 中文字幕一区二区视频_成人精品免费观看欢迎你_999成人网_亚洲不卡免费视频_老少配老妇老熟女中文普通话_国产精品久久mv | 亚洲欧美视频网站_久久久久久精_国产在线中文_久久夜色精品国产欧美乱文字幕无码_高潮抽搐潮喷毛片在线播放_九九九热视频 | 18禁裸体女免费观看_六月婷婷综合激情_亚洲AV中文无码乱人伦_给我免费播放片在线中国_一级片啪啪_欧美成人片在线 | 97久久精品无码一区二区_久久丫亚洲一区二区_99久久一区二区_日本中文字幕在线观看全_亚洲成色综合网站yy_爱爱爱视频免费看 | 国产精品偷伦视频免费手机播放_在线观看二区_色图综合网_一区二区三区日韩精品视频_精品免费日产一区一区三区免费_久久久国产精品一区二区三区 | 国产精品成人观看视频国产奇米_欧美日韩中文视频_五月丁香五月伦理_亚洲国产精品成人综合久久久久久久_69式高清视频在线观看_四虎com | 国产日韩v精品一区二区_无码一区二区波多野结衣播放搜索_A级毛片高清免费视频播放出要看_久久男人av资源站_国产精品97在线_caoporn97人人澡 | 水蜜桃亚洲精品_欧美精品V欧洲精品_欧美又粗又猛又爽又黄A片_好男人好资源在线影视官网_国产精品一区一区_欧美成人高清视频 | 中国一级免费视频_久久国产成人免费网站777_www.一区_四虎国产成人精品免费一女五男_99在线精品免费视频_久久久久久精品人妻免费网站 | 小小拗女性BBWXXXX国产_欧美日本亚洲_免费福利网站在线观看_日本成人片在线_激情综合激情五月俺也去_欧美另类精品XXXX人妖 | 国产91边播边对白在线_中文精品久久久_福利视频一二三区_羞羞动漫视频网站_欧美在线观看在线观看_欧美一级在线观看 | 国产91九色视频_久久精品国产亚洲精品2020_久爱精品在线_成人毛片黄色_a最新天堂网资源_男人插女人免费 | 性少妇videosexfreexxxx_亚洲一区自拍偷拍_亚洲人成日韩中文字幕不卡_国产在线不卡观看_免费视频成人片在线观看_国产精品久久人 | 日韩www视频_久久超碰97人人做人人爱_午夜手机在线_久久国产美女视频_欧美成人在线直接看视频网站_两个人看的www免费视频中文 | 水蜜桃亚洲精品_欧美精品V欧洲精品_欧美又粗又猛又爽又黄A片_好男人好资源在线影视官网_国产精品一区一区_欧美成人高清视频 | 亚洲成香蕉AV_超碰97国产_亚洲综合第一在线影视_亚洲AV小说最新在线观看网址_一区二区在线观看91在线_狠狠色噜噜狠狠狠狠av | 91精品国产99久久久久久红楼_欧美高清在线一区二区_www.99在线观看_亚洲av日韩av不卡在线观看_国产一区二区三区无码_亚洲—本道在线无码AV发 | 久久国产影视_国产精品玩偶在线观看_日韩人妻中文无码一区二区三区_深夜免费福利视频_精品久久久999_午夜黄色小视频 | 久久精品大片_青草久久久国产线免观蜜芽_无码国产精品一区二区免费久久_久久中文字幕人妻熟AV女_福利视频一二区_日日夜夜操操操 |