免费国产网站_秋霞午夜一区二区三区视频_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.             );

    否則工程會鏈接出錯。


    主站蜘蛛池模板: 手机在线看片亚洲_97香蕉_一区二区三区中文字幕在线观看_国产普通话对白刺激_色拍拍欧美视频在线看_国产成A人亚洲精V品无码樱花 97色在线观看免费视频_岛国岛国免费v片在线观看_日韩综合一区二区_九一视频在线免费观看_久久精品国产露脸对白_日韩999 | 精久久久久_国产高清在线观看视频_日韩美女一级片_日韩欧美激情兽交_成人免费午夜无码视频_精品在线视频亚洲小说 | 鸡鸡磨逼逼_欧洲熟妇色XXXXX视频_毛片亚洲AV无码精品国产午夜_亚洲天堂自拍_夜夜嗨av色综合久久久综合网_色99网 | 久久久久亚洲AV成人片_xxddcc羞羞答答_99精品热6080yy久久_日本处XXXX19_九九成人_毛色毛片免费观看 | 美女疯狂连续喷潮视频_亚洲日产精品_av性色在线观看_亚色精品_日韩黄色录像_在线观看亚洲专区 | 久久精品一区二区三区四区毛片_免费爆乳精品一区二区_久久国产精品视频在线_麻豆黄色网_www久久久久久_福利视频在线 | 中文字幕V亚洲ⅤV天堂_噜噜私人影院_欧美一级色片_国产日日爱_岛国精品_一区二区在线亚洲 | 在线免费激情视频_视频二区在线观看_av在线免费视屏_超碰在久久_被多个强壮的黑人灌满精_国产福利一区视频 | av一区二区三区在线_一级黄色在线视频_国产乱淫精品一区二区三区毛片_乱色欧美激惰_免费国产91_久久久久久综合 | 国产一级av片一区久久久_欧美日韩国产伦理_美女脱内衣禁止18以下看免费_成人蜜桃av_美女视频黄a全部免费看小说_成人性生交A片免费看 | 久久精品欧美日韩精品_少妇精品一区_91射区_欧洲日韩av_亚中文字幕_tv男人的天堂在线看chengr | 午夜在线观看视频_韩国日本福利在线_最新日本视频_在线观看欧美精品_免费播放片ⅴ免费人成视频_成人av片在线观看 | 久久免费观看午夜成人网站_国产高清一区二区_久久久网站免费_99re久久精品国产_国产色网_久久99精品久久久久久不卡 | 无码国产玉足脚交久久2024_亚洲欧美闷骚影院_亚洲自偷观看高清久久_亚洲三级香港三级久久_欧美经典一区二区三区_婷婷综合少妇啪啪喷水 | 亚洲国产精品成人一区二区在线_涩爱av蜜臀夜夜嗨av_中文字幕九区_亚洲一区二区三区在线影院_综合人妻久久一区二区精品_国产精品美女久久久 | 精品视频成人_免费一级黄色片_欧美一区二区在线_精品无码国产自产拍在线观看_性欧美videofree另类_亚洲一区精品人人爽人人躁 | 亚洲天堂色网站_欧美牲交videossexeso_亚洲精品人成_亚洲欧美网址_国产一级淫片免费看_国产精品久久久久久久一区二区 | 疾速追杀4在线观看完整免费高清_国产精品拍国产拍拍偷剧情_超碰911_日本肉体xxxx裸体137大胆_欧美牲交A欧美牲交AⅤ免费真_看了又看第二部免费观看 | 深夜精品福利_成人在线免费视频播放_亚洲成人视屏_精品国产欧美另类一区_亚洲国产精品成人久久蜜臀_国产精品亚 | 欧美日本视频一区_国产精品视频500部_996久久国产精品线观看_曰韩无码AV一区二区免费_一级视频在线观看_国产妇女aaaaaa免费视频 啊v在线免费观看_91免费版在线看_一区二区视频网站_最新日韩免费_男男黄GAY片免费网站WWW_91国在拍‖国语自产 | 在线观看视频精品_1313午夜精品理论片蜜桃网_国产另类在线视频_美女张开腿让男人视频_国产性爱自拍av_亚洲永久精品免费www | 亚洲日韩第一页_美女视频黄免费_av亚洲产国偷v产偷v自拍软件_国产精品一区久久人人爽_亚洲精品日韩精品_日日夜夜精品免费看 | 亚洲激情二区_免费a级毛片又大又粗又黑_久久久久久久久久国产精品_久久精品—区二区三区_国产免费av高清_中文字幕永久在线观看 | 成人黄网站A片免费观看_日韩一区日韩二区_国产色一区二区_欧洲色在线_久久亚洲精品无码Va白人极品_狠狠色噜噜狠狠狠狠aV不卡 | 亚洲VA天堂VA欧美VA在线_亚洲AV国产AV综合AⅤ_久久精品夜色噜噜亚洲a∨_亚洲午夜久久久久久久_亚洲毛片在线免费_美女脱个精光露出尿口视频 | 国产免费久久久_午夜精品久久久久久中宇_母乳1区在线_少妇被躁爽到高潮无码麻豆AV_国产亚洲精品成人AA片在线播_日本三级在线播放线观看免 | 国产精品7m凸凹视频分类_国产午夜福利伦理300_久久久久无码精品国产不卡_青青草99_久久久国产91_一级a毛片免费观看久久精品 | 日韩女同互慰一区二区_八戒午夜福利啪啪影视_天天搞av_在线中文字幕一区二区精品区_亚洲一区成人在线_69热视频 | 91精品视频在线播放_久久久激情视频_国产精品一区二区av在线观看_国产精品高潮久久久久久_久久99国产精品久久99大师_国产精品一级视频 | 午夜国产小视频_色老板最新地址入口处_日韩视频精品在线观看_美女高潮在线观看_在线观看无码H片_狠狠操人人干 | 图片区小说区AV区_av在线高清观看_中国一级毛片免费高清_九九精品在线观看视频_日韩国产精_777婷婷天堂综合区色吧 | 97好色_玖草在线观看_国产a久久精品一区二区三区_国产精选自拍_国产三级精品视频_亚洲色图在线看 | 毛片网站观看_精品国产一区二区三区久久久蜜_中文字幕一区二区三区四区在线_亚洲美女免费_国产午夜激无码AV毛片_乱xxxxx普通话对白 | 欧美一区二区三区影院_avhd高清101谜片在线观看_中文字幕一区二区三区蜜月_欧美乱大交xxxxx古装_国产一级男女a爰免费视频_国产成年综合 | 亚洲精品久久久久AV无码_午夜激情av在线_成人性午夜免费视频网站_亚洲AⅤ无码一区二区波多野_无码午夜福利免费区久久_中文字幕精品亚洲无线码一区 | 国产99久久久国产精品~~牛_日本www_九七在线视频_久久国产色综合_粉色视频在线观看高清免费完整_一级黄色免费视频 | 久久99国产精品成人_红杏网站永久免费视频入口_美女视频黄的_白丝无内液液酱视频在线观看_无码专区中文无码野外_在线成人国产天堂精品av | 高清日韩在线_亚洲精品色图_成人伊人网_hd德国xxxxhdvideos_武侠古典av_偷拍粉嫩25位美女视频在线观看 | 亚洲精品国产亚洲_欧美性生活一区二区三区_欧美亚洲日产综合新一区_欧美中文字幕一区二区_国产精品A1A2久久久_av看片在线观看 | 1级黄色录像_在线久热_久久午夜精品一区二区_91新人在线观看_免费观看国产视频_肉色丝袜足j视频国产 | 精品国产一区二区AV麻豆不卡_69导航_白浆久久_亚洲欧美婷婷五月色综合麻豆_欧美一级录像_免费91网站 |