2017-03-24 3 views
0

Der Versuch, JS-Bibliothek mit meinem C# -Code zu implementieren. ist sehr einfach, aber ich bin immer diese Fehlermeldung:EntryPointNotFoundException externe JS Lib-Fehler

EntryPointNotFoundException: Test TalkDB.Start() (at Assets/Scripts/TalkDB.cs:30)

C# -Code ist in Skriptordner und JS-Bibliothek in plugins/webgl mit .jslib Erweiterung. auch diesen Artikel lesen, aber keine Ahnung, was mir fehlt: https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html?_ga=1.27144893.1658401563.1487328483

C# Code:

public class TalkDB : MonoBehaviour 
{ 
    [DllImport("__Internal")] 
    private static extern void Test(); 

    void Start() 
    { 

     Test(); 

    } 
} 

JS Library:

var HighscorePlugin = { 
    Test: function() 
    { 
     window.alert("Testing 1, 2, 3,..."); 
    } 
}; 

mergeInto(LibraryManager.library, HighscorePlugin); 

Antwort

0

EntryPointNotFoundExceptionmeans bedeutet, dass die Funktion „Test "ist entweder (A) nicht als exportierbar (nicht sichtbar) markiert oder (B) Signatur stimmt nicht mit der C# -Definition überein.

Wahrscheinlich ist Ihr Problem das ehemalige (A).

Ich würde empfehlen, DUMPBIN.EXE gegen Ihre Bibliothek auszuführen, um zu überprüfen, ob Ihre "Test" -Funktion exportiert wird und dass die jeweilige Signatur mit Ihrer C# -Definition übereinstimmt. Könnte eine Code-Injektion auf JS-Seite sein.

+0

Hallo, vielen Dank für Ihre Antwort. Ich kann Bibliotheksfunktionen bekommen, wenn ich schreibe, also nehme ich an, dass dieser Teil in Ordnung ist. Dumpbin.exe funktioniert mit .jslib? – Gonkas

+0

Sie können jslib nicht in .NET über InterOp importieren. Ich hatte angenommen, dass Ihre JavaLib etwas hat, um Windows DLL Erweiterungen zu erleichtern, aber das scheint nicht der Fall zu sein. Z.B. Wenn DumpBin Ihre Bibliothek nicht erkennt, müssen Sie Ihre Bibliothek mit etwas umhüllen, das Windows DLL unterstützt – SensorVista

1

Die Antwort gefunden, ist in der Tat ziemlich einfach. Ich arbeite nicht, wenn ich lokal arbeite, nur wenn ich von einem Server laufe. Um diesen Fehler zu verhindern, dass dies getan werden sollte:

#if UNITY_WEBGL & & UNITY_EDITOR

[DllImport ("__ Internal")] private static extern void Test(); #else

// etwas anderes zu emulieren, was Sie

#endif

Und tun dies auch tun möchten, wenn Sie die Funktion aufrufen. Happy Programmierung :)