簡體   English   中英

用C#編寫的本機插件EntryPointNotFoundException

[英]Native Plugin written in C# EntryPointNotFoundException

我正在嘗試為Unity開發本機插件(使用Unity 2017.1.0f3和VS 2015)。 我的本機插件的目標平台是UWP,並且該插件使用C#編寫。

以下是我的插件和Unity中腳本的代碼。

針對Windows 10 14393的類庫中的插件代碼

public static class SettingsService
    {
        public static string GetSetting( string key )
        {
            var localSettings = ApplicationData.Current.LocalSettings;
            try
            {
                var stringvalue = localSettings.Values[key] as string;
                return stringvalue;
            }
            catch ( ArgumentNullException en )
            {
                return default( string );
            }
        }

        public static void SaveSetting( string key, string value )
        {
            var localSettings = ApplicationData.Current.LocalSettings;
            localSettings.Values[key] = value;
        }
    }

Unity腳本代碼

public class TestNativePlugin : MonoBehaviour {

    [DllImport( "UnityPluginTestUWP", EntryPoint = "GetSetting" )]
    private static extern string GetSetting( string key );

    [DllImport( "UnityPluginTestUWP", EntryPoint = "SaveSetting" )]
    private static extern void SaveSetting( string key, string value );
    // Use this for initialization
    void Start () {    
        SaveSetting( "setting", "oeoeoe" );
        System.Diagnostics.Debug.WriteLine( GetSetting( "setting" ) );
    }    
}

問題是在運行時我收到一條EntryPointNotFoundException消息: 在DLL UnityPluginTestUWP.dll中找不到名為“ SaveSetting”的入口點

我已經在線閱讀了由於編譯器對函數名稱的處理而可能發生的情況。 但這僅在C ++代碼中。 我的插件是用C#編寫的。

任何幫助克服此問題的幫助都值得歡迎。

您的問題是托管插件。 如果您要制作一個本機C ++插件和另一個環繞它的C#插件,則只需要使用DllImportextern 這里不是這種情況,因為我看不到任何C ++代碼。

一個來自Unity Doc的簡單托管插件:

namespace DLLTest {

    public class MyUtilities {

        public int c;

        public void AddValues(int a, int b) {
            c = a + b;  
        }

        public static int GenerateRandom(int min, int max) {
            System.Random rand = new System.Random();
            return rand.Next(min, max);
        }
    }
}

對其進行編譯,然后將.dll文件放入Unity <project folder>/Assets文件夾中

用法:

public class Test : MonoBehaviour {

     void Start () {
        MyUtilities utils = new MyUtilities();
        utils.AddValues(2, 3);
        print("2 + 3 = " + utils.c);
     }

     void Update () {
        print(MyUtilities.GenerateRandom(0, 100));
     }
}

如果要在托管插件中使用任何Unity函數或API,則在構建插件之前,還必須添加UnityEngine.dll作為對插件的引用。 只需右鍵單擊解決方案資源管理器 ,然后選擇“ 添加引用”,然后在下面的以下文件夾中查找UnityEngine.dll

您可以在Windows上找到此文件:

Program Files\Unity\Editor\Data\Managed\UnityEngine.dll

您可以在Mac OSX上找到此文件,網址為:

Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM