我建立一个C ++库(窗口,DLL),我想嵌入SWI-Prolog的一些功能。
我正在做的是:
#include <Windows.h>
#include <SWI-Prolog.h>
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // DLL モジュールのハンドル
DWORD fdwReason, // 関数を呼び出す理由
LPVOID lpvReserved // 予約済み
)
{
BOOL result = TRUE;
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
char* av[]{"libswipl.dll"};
_putenv(R"(SWI_HOME_DIR=C:\Program Files (x86)\swipl\)");
if(!PL_initialise(1, av))
{
result = TRUE;
}
else
{
PL_halt(1);
result = FALSE;
}
break;
}
case DLL_PROCESS_DETACH:
{
result = PL_cleanup(1);
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
}
return result;
}
并包括 “libswipl.lib”,从 “swipl \ LIB \ libswipl.dll.a” 改名。
首先,它提供了,因为缺少DLL的错误,所以我复制那些在我的可执行文件夹,直到它是幸福的(具体libswipl.dll; libgmp-10.dll; pthreadGC2.dll)。
我并不需要包括PL文件转换成可执行文件(这是什么原因swipl-LD呢?),因为我想通过代码后dinamically添加的事实和规则,所以它的确定有一个明确的状态初始化。
我想知道的是,我该如何摆脱依赖(SWI_HOME_DIR),并使其独立是什么?