Подключаю в excel свою библиотеку таким образом
Public Declare Function xItsmyfunc Lib "itsmydll.dll" Alias "myfunc" (ByVal Arg1 As Double, ByVal Arg2 As Double) As Double
Всё работает если dll находится в system32, но мне нужно что-бы эта dll искалась в той директории с которой запустили excel файл,
не подскажете как это реализовать?
Здравствуйте, theShadow, Вы писали:
S>Подключаю в excel свою библиотеку таким образом S>Public Declare Function xItsmyfunc Lib "itsmydll.dll" Alias "myfunc" (ByVal Arg1 As Double, ByVal Arg2 As Double) As Double S>Всё работает если dll находится в system32, но мне нужно что-бы эта dll искалась в той директории с которой запустили excel файл, S>не подскажете как это реализовать?
S>Всё работает если dll находится в system32, но мне нужно что-бы эта dll искалась в той директории с которой запустили excel файл, не подскажете как это реализовать?
Есть мнение, что нужно сделать ChDir на ту директорию и вызвать функцию.
>Есть мнение, что нужно сделать ChDir на ту директорию и вызвать функцию.
У меня тоже была такая идея, только вот
Public Declare Function xAnyFunc Lib СhDir()+".\anything.dll" Alias "anyfunc" (ByVal lpszDst As Long) As Long
и разные другие комбинации не проходят с chdir
Vi2>>Есть мнение, что нужно сделать ChDir на ту директорию и вызвать функцию.
S>У меня тоже была такая идея, только вот
S>Public Declare Function xAnyFunc Lib СhDir()+".\anything.dll" Alias "anyfunc" (ByVal lpszDst As Long) As Long
S>и разные другие комбинации не проходят с chdir
Это естественно для определения. Я же предлагал ее в том месте, где функция используется. Перед вызовом функции из DLL корректируется текущая директория для поиска этой самой DLL — она же не сразу грузится.
Вот полный список путей и способов поиска DLL на диске. Это описано в MSDN для LoadLibrary:
With both implicit and explicit linking, Windows first searches the set of pre-installed DLLs such as the performance library (KERNEL32.DLL) and the security library (USER32.DLL). Windows then searches for the DLLs in the following sequence:
The directory where the executable module for the current process is located.
The current directory.
The Windows system directory. The GetSystemDirectory function retrieves the path of this directory.
The Windows directory. The GetWindowsDirectory function retrieves the path of this directory.
The directories listed in the PATH environment variable.
Здравствуйте, theShadow, Вы писали:
>>Есть мнение, что нужно сделать ChDir на ту директорию и вызвать функцию. S>У меня тоже была такая идея, только вот S>Public Declare Function xAnyFunc Lib СhDir()+".\anything.dll" Alias "anyfunc" (ByVal lpszDst As Long) As Long S>и разные другие комбинации не проходят с chdir
Очевидно имелось ввиду следующее:
Public Declare Function xAnyFunc Lib"anything.dll"Alias"anyfunc" (ByVal lpszDst As Long) As Long
Sub CallDLLFunction()
Dim Param As Long
ChDir("Туда, где лежит DLL")
anyfunc(Param)
end sub