unityå¯ä»¥å¯¼å
¥å
¶å®è¯è¨ç¼åï¼åç¼è¯ï¼ç代ç ï¼ç§°ä¸ºåçæ件ï¼Native Pluginsï¼ãä»å¤©ä¸ºå¤§å®¶å享å¦ä½å建Unityåçæ件ã
Unityä¸çæ管åéæ管æ件
è¿æ¥ä¸åç代ç 并éUnityé¦åçãè¥ä½ æ¯Windowsç¨æ·ï¼å¯è½å¬è¯´è¿DLLï¼å¨æé¾æ¥åºç缩åãä¸åæºåºç¨ç±»ä¼¼ï¼å®ä»¬æ¯ç¼è¯è¿ç软件ãä¸åçæ¯ï¼å®ä»¬ä¸è½ç´æ¥æ§è¡ï¼å 为å®ä»¬æ¯è¢«ä¸é¨è®¾è®¡ä¸ºä¾å
¶å®åºç¨ä½¿ç¨çã
Unityæ¯æ两ç§æ件ï¼æ管ï¼Managedï¼åéæ管ï¼Unmanagedï¼çãåè
æ¯ç¨C#ç¼å并ç¼è¯ä¸ºéç¨ä¸é´è¯è¨ï¼CILï¼çåèç è¯è¨ãæ管æ件ä¸C#èæ¬ä¸æ ·å¼ºå¤§ï¼ä¸å¸¦æç¼è¯è¿çæºç ãéæ管ï¼æåçï¼æ件ï¼æ¯ä½¿ç¨å
¶å®è¯è¨ç¼åç软件ï¼å
¸åæ¯C++ãå®ä»¬å¨åè½ä¸å ä¹æ²¡ä»ä¹éå¶ï¼èä¸å 为é½è¢«ç¼è¯ä¸ºæºå¨ç æ以é常æ¯ä¼ ç»çèæ¬è¦å¿«ã
第ä¸æ¥ï¼æ°å»ºC++项ç®
æ¬ä¾ä¸ï¼æç¨çæ¯Visual Studio 2015ï¼ä½ å¯ä»¥éæ©ä»»æIDEç¼è¯C++代ç ãé¦å
å建ä¸ä¸ªéæ管C++åºä¹å°±æ¯æ°å»ºé¡¹ç®ãæå¼Visual Studioï¼ä¾æ¬¡ç¹å»File | New Project ï¼éæ©Visual C++ | Win32 Console Applicationã
å¨ç»é¡¹ç®å½ååï¼æ¬ä¾ä¸ä¸ºTestDLLï¼ï¼ç¡®ä¿å°åºç¨ç±»åï¼Application typeï¼è®¾ä¸ºDLLï¼éå é项ï¼Additional optionsï¼ä¸éæ©ç©ºé¡¹ç®ï¼Empty projectï¼ã
è³æ¤ï¼Visual C++解å³æ¹æ¡å·²ç»åå¤å¥½ï¼æ们å¯ä»¥å¼å§ç¼å代ç äºã
第äºæ¥ï¼ç¼ååº
C++代ç é常å为两个æ件ãå½æ°å®ä¹ï¼å¤´æ件ï¼åå½æ°å®ç°ï¼å®ç°æ件ï¼ãå®ç°æ件为.cppæ件ï¼æ¾å¨ResourceFilesç®å½ä¸ï¼å¤´æ件为åå.hæ¾å¨HeaderFilesç®å½ä¸ãæ¬ä¾ä¸æ们å建ä¸ä¸ªå¤´æ件åä¸ä¸ªå®ç°æ件ï¼å®ç°æ件å°å
å«ææè¦ä¿åå°DLLçåè½ãå¯ä»¥å¨ç¸åºçæ件夹ä¸åå»å³é®æ°å»ºæ件ï¼ç¶åä¾æ¬¡éæ©Addï¼æ·»å ï¼>NewItem(æ°é项)ã
å®ç°é¨åï¼TestDLLSort.cpp
å¼å§ç¼ç ï¼å®ç°ç»æ°ç»æåºã
[AppleScript] 纯ææ¬æ¥ç å¤å¶ä»£ç ?
#include "TestDLLSort.h" #include extern "C" { void TestSort(int a[], int length) { std::sort(a, a+length); } }
5ï½7è¡ä½¿ç¨äºalgorithm åºéçæ°ç»æåºå½æ°std:sortãå¦æçæC++11å°±ä¼ç¥éãåªå¢å äºextern "C"åï¼å¿
é¡»ç¨å®å°TestSortçå¼ç¨å¯¼åºå°DLLã
头æ件ï¼TestDLLSort.h
å®ç°æ件ä¸çå®ä¹å¿
é¡»ä¸å¤´æ件ä¿æå®å
¨ä¸è´ãå®å¿
é¡»å
å«TestSortååä¹å°±æ¯å½æ°ç¾åã
[AppleScript] 纯ææ¬æ¥ç å¤å¶ä»£ç ?
123456 #define TESTDLLSORT_API __declspec(dllexport) extern "C" { TESTDLLSORT_API void TestSort(int a[], int length); }
å
¶ä½é¨åæ¯å建DLLå¿
é¡»ç代ç ãTESTDLLSORT_APIå¯ä»¥æ¯ä»»æååï¼ç¨æ¥æ è®°ææç导åºå½æ°ãå¨æ´å¤æ软件ä¸ï¼TESTDLLSORT_APIåºè¯¥æ ¹æ®éè¦ç»å®å° __declspec(dllimport) ä¸ãä½æ¯å¨æ¬ä¾ä¸ï¼æ²¡æå¿
è¦ã
第ä¸æ¥ï¼ç¼è¯
æåä¸æ¥æ¯å¨Visual Studioä¸ç¼è¯æ们çDLLã请确ä¿åå¸å¹³å°è®¾ç½®æ£ç¡®ï¼32ä½æ64ä½ï¼ãç¶åä¾æ¬¡éæ©Build>Build Solutionã
å¨å±å¹ä¸æ¹çæ§å¶å°ä¸ä¼çå°è¾åºæ¥å¿å¦ä¸ï¼
[AppleScript] 纯ææ¬æ¥ç å¤å¶ä»£ç ?
1>------ Rebuild All started: Project: TestDLL, Configuration: Release x64 ------ 1> TestDLLSort.cpp 1> Creating library C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.lib and object C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.exp 1> Generating code 1> All 30 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. 1> Finished generating code 1> TestDLL.vcxproj -> C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.dll ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
è¥åç°æè¦åå¦ï¼warning C4273: inconsistent dlllinkage,è¿å¯è½è¡¨ç¤ºç¼è¯å¨ä¸ç¡®å®ä½¿ç¨__declspec(dllimport) è¿æ¯ __declspec(dllexport)ãè¥æ³ä¸ºUnityå建åçæ件ï¼å°±ä½¿ç¨åè
ã
第åæ¥ï¼å¯¼å
¥Unity
æ ¹æ®ä¸é¢çç¼è¯æ¥å¿ï¼å¨å·¥ç¨æ件ä¸æ¾å°ç¼è¯å¥½çDLLãæ¬ä¾ä¸ï¼å®å¨æ件夹x64\Releaseä¸ãæ们åªè¦è¿ä¸ªæ件ãå¨Unityä¸ä½¿ç¨å®ç第ä¸æ¥æ¯æå®æ·è´å°Pluginsæ件夹ä¸ã
åçæ件é常ä¸æä½ç³»ç»æå¹³å°ç¸å
³ãå¯ä»¥æ¥çå³ä¾§çæ£è§é¢æ¿ç¡®ä¿æ¯ä¸ªDLL被å
å«å°æ£ç¡®çå¹³å°ã
第äºæ¥ï¼å¨Unityä¸ä½¿ç¨
导å
¥åï¼ä½¿ç¨DLLå°±ç¸å¯¹ç®åäºã第ä¸æ¥æ¯ä½¿ç¨DLLImportå®ä¹å
¥å£ï¼EntryPointï¼ãä½ éè¦æå®DLLååå½æ°åãä¼æä¾å«å让å®å¯ä»¥åå
¶å®å½æ°ä¸æ ·è¢«è°ç¨ã
[AppleScript] 纯ææ¬æ¥ç å¤å¶ä»£ç ?
using UnityEngine; using System.Runtime.InteropServices; public class TestDLL : MonoBehaviour { // The imported function [DllImport("TestDLL", EntryPoint = "TestSort")] public static extern void TestSort(int [] a, int length); public int[] a; void Start() { TestSort(a, a.Length); } }
å
¥å£çå符串å¿
é¡»ä¸C++åºä¸çååä¸æ ·ãä½ä½ å¯ä»¥ä½¿ç¨å¦ä¸æ¹æ³è°ç¨å½æ°ï¼ä»¥åC#å°±è¿æ ·è°ç¨å®ã
ä½ åºè¯¥æ³¨æå°Unityå¨ç¼è¾å¨ä¸ä¸è½æ£æµéæ管DLLï¼å¿
é¡»è¿è¡æ¸¸ææ¥æ£æµæ¯å¦æåè¿æ¥ã对äºæ管çDLLï¼åå¯ä»¥éææ£æµã
温馨提示:答案为网友推荐,仅供参考