2016-08-17 6 views
0

У меня есть две библиотеки DLL, которые я создал, и они находятся в Assets/Plugins. Кажется, что все работает нормально, другое дает мне исключение EntryPointNotFoundException, хотя код выглядит точно так же для меня. Может быть, есть некоторые настройки, которые я пропустил в VisualStudio? Какие настройки мне нужны?EntryPointNotFoundException в одной DLL пока кажется прекрасным в другом

Тот, который работает выглядит следующим образом:

C#

[DllImport("winBlinkDetect")] 
    private static extern void IsSeven(ref int x); 

[DllImport("winBlinkDetect")] 
    private static extern int PrintFive(); 

void Start() 
    { 
     int test = 0; 
     Debug.Log("x = " + test); 
     IsFive(ref test); 
     Debug.Log("x = " + test); 
     Debug.Log(PrintFive()); 
    } 

C++ Header

#if _MSC_VER // this is defined when compiling with Visual Studio 
#define EXPORT_API __declspec(dllexport) // Visual Studio needs annotating exported functions with this 
#define _USE_MATH_DEFINES 
#else 
#define EXPORT_API // XCode does not need annotating exported functions, so define is empty 
#endif 

#ifdef __cplusplus 
extern "C" { 
#endif 

    void EXPORT_API IsFive(int *y); 
    void EXPORT_API IsSeven(int *x); 
    int EXPORT_API PrintFive(); 


#ifdef __cplusplus 
} 
#endif 
C++ .cpp 

void IsFive(int *y) 
{ 
    *y = 5; 
} 

void IsSeven(int *x) 
{ 
    *x = 7; 
} 

int PrintFive() 
{ 
    return 99; 
} 

Для того, что не работает: C#

[DllImport("brain")] 
    private static extern int GiveNinetyNine(); 

    [DllImport("brain")] 
    private static extern void IsFive(ref int x); 

void Start() 
    { 
     int test = 0; 
     Debug.Log("x = " + test); 
     IsFive(ref test); 
     Debug.Log("x = " + test); 
     Debug.Log(GiveNinetyNine()); 
    } 

C++ Header

#if _MSC_VER // this is defined when compiling with Visual Studio 
#define EXPORT_API __declspec(dllexport) // Visual Studio needs annotating exported functions with this 
#define _USE_MATH_DEFINES 
#else 
#define EXPORT_API // XCode does not need annotating exported functions, so define is empty 
#endif 

#include <string>; 

#ifdef __cplusplus 
extern "C" { 
#endif 

    // test functions 
    void EXPORT_API IsFive(int *y); 
    void EXPORT_API IsSeven(int *x); 
    int EXPORT_API GiveNinetyNine(); 
#ifdef __cplusplus 
} 
#endif 
C++ .cpp 

void IsFive(int *y) 
{ 
    *y = 5; 
} 

void IsSeven(int *x) 
{ 
    *x = 7; 
} 

int GiveNinetyNine() 
{ 
    return 99; 
} 

ответ

1

Dependency Walker не показывает экспортируемые функции, но экспортируемые функции в заголовочном файле выглядит хорошо. Кажется, файл h не включен в файл cpp. Чтобы проверить это, введите __declspec(dllexport) внутри cpp в определении функции.

+0

Это действительно хороший инструмент, спасибо. Когда я выполняю проверку того, кто работает, все функции отображаются без изменений. Когда я делаю чек на том, который не работает, никаких функций не появляется вообще. – mBajema

+0

@mBajema хороший знак, пожалуйста, проверьте, что вы скомпилировали обе библиотеки dll для образца платформы - x86 или x64 – Nikita

+0

У меня есть оба они установлены как платформа конфигурации конфигурации x64 в диспетчере конфигурации. – mBajema