2012-06-15 7 views
0

Существует три файла, лежащих в каталоге с: /. Это lib.dll, conf.ini, libImp.cpp. И я вызываю lib.dll «init» в файле libImp.cpp. Для успешного вызова функции «init» обязательно нужно, чтобы conf.ini лежал в том же каталоге. Проблема в том, что если я попытаюсь вызвать функцию dll из другого каталога, появится ошибка. В нем говорится, что он не видит conf.ini. Например, если libImp.cpp находится в каталоге c:/catalog2, появляется эта ошибка. Часть кода, который отвечает за функции длл вызова:Вызов библиотеки dll из cpp

HINSTANCE hGetProcIDDLL = LoadLibrary("c:\\catalog\\lib.dll"); 
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),"init"); 
typedef int (__stdcall * pICFUNC)(char *); 

pICFUNC init; 
init = pICFUNC(lpfnGetProcessID); 

bool result = 0; 
char user_id[]="user"; 
result = init(user_id); 

Как сделать вызов функции независимо от местоположения каст файла?

ответ

1

Вы смешиваете концепции.

.cpp-файлы используются в качестве входных данных для компилятора и не могут выполняться сами. Неважно, входной файл libImp.cpp находится в c:\catalog\. Это может иметь значение, когда вывод компилятора (.EXE, я предполагаю?) Заканчивается.

Местоположение файла .INI определяется кодом в DLL. Он загружает INI-файл, поэтому он определяет, где искать INI-файл. Мы не можем догадаться, где это выглядит. Инструмент, такой как SysInternals ProcMon, может использоваться для мониторинга DLL и проверки того, что он ищет.

+0

И тогда, если я хочу вызвать функцию dll из апплета, в этом случае я не получу функцию правильно? Поскольку класс java, который загружает библиотеку, находится где-то в папках браузера. –

+0

@hello_amigo: Основная задача, как я уже сказал, - определить, как находится файл INI. Это может быть, например, функция «Текущий рабочий каталог», которая в целом непредсказуема. – MSalters

Смежные вопросы