Ну, я сейчас работаю над проектом, похожим на JOGL, просто хочу переделать его, чтобы я мог сделать то же самое с DirectX. Я столкнулся с этой ошибкой в самом начале и изучал ее около 2 дней.
Вот полная ошибка:
Ошибка 1 ошибка LNK2019: неразрешенный внешний символ _чертенок_JAWT_GetAWT @ 8 упоминается в функции «public: __thiscall JAWT_Info :: JAWT_Info (struct JNIEnv_ *, class _jobject *)» (?? 0JAWT_Info @@ QAE @ PAUJNIEnv _ @@ PAV_jobject @ \ \ @ Z): visual studio 2013 \ Проекты \ BezerkGL \ BezerkGL \ redgl.obj BezerkGL
Вот заголовок, который я использую:
#ifndef INFO_H
#define JAWT_INFO_H
// Helper class for accessing JAWT Information.
class JAWT_Info
{
private:
JAWT awt;
JAWT_DrawingSurface* ds;
JAWT_DrawingSurfaceInfo* dsi;
JAWT_Win32DrawingSurfaceInfo* dsi_win;
public:
JAWT_Info(JNIEnv *env, jobject panel)
{
jboolean result;
jint lock;
// Get the AWT
awt.version = JAWT_VERSION_1_3;
result = JAWT_GetAWT(env, &awt);
assert(result != JNI_FALSE);
// Get the drawing surface
ds = awt.GetDrawingSurface(env, panel);
if (ds == NULL)
return;
// Lock the drawing surface
lock = ds->Lock(ds);
assert((lock & JAWT_LOCK_ERROR) == 0);
// Get the drawing surface info
dsi = ds->GetDrawingSurfaceInfo(ds);
// Get the platform-specific drawing info
dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
}
HWND getHWND()
{
if (dsi_win == NULL)
return NULL;
return dsi_win->hwnd;
}
HDC getHDC()
{
if (dsi_win == NULL)
return NULL;
return dsi_win->hdc;
}
virtual ~JAWT_Info()
{
if (ds != NULL)
{
// Free the drawing surface info
ds->FreeDrawingSurfaceInfo(dsi);
// Unlock the drawing surface
ds->Unlock(ds);
// Free the drawing surface
awt.FreeDrawingSurface(ds);
}
}
};
#endifJAWT_
И я уверен, что это вся необходимая информация.
Немного поздно, но может быть полезно для кого-то.
Кажется, что JNI-часть приложения была скомпилирована с Java в другой архитектуре (вероятно, 64-битной) по сравнению с частью C (вероятно, 32-битной). Я имел обыкновение иметь такую ошибку, которая была причиной. Я переключил конфигурацию на Java 32 бит, и это решило проблему.
Других решений пока нет …