У меня есть встроенная функция внутри управляемой (c ++ / cli) библиотеки смешанного режима, которая вызывает отдельную встроенную библиотеку DLL.
Вот встроенная функция, которая инициализирует некоторые указатели на функции с помощью окон GetProcAdress:
//in header
static HMODULE hDll;
static void (*MYDLL_Func1)(void*);
static void (*MYDLL_Func2)(void);
int BeginDll()
{
if (!hDll) {
hDll= LoadLibraryHelper("mydll.dll");
if (hDll) {
MYDLL_Func1 = (LPVOID)GetProcAddress(hDll, "MYDLL_Func1");
MYDLL_Func2 = (LPVOID)GetProcAddress(hDll, "MYDLL_Func2");
if (!MYDLL_Func1||
!MYDLL_Func2)
{
FreeLibrary(hDll); hDll= NULL;
} else {
Log("were good to go");
}
}
}
return (hDll!= NULL);
}
Теперь я хочу написать функцию-обертку, которая будет вызывать этот указатель на функцию, но при этом я получаю «AccessViolationException»
public ref struct Wrapper sealed abstract
{
void ManagedFunc(IntPtr hwnd)
{
if (BeginDll())
{
MYDLL_Func1(reinterpret_cast<HWND>(hwnd.ToPointer));
MYDLL_Func2();
}
}
}
Я не предполагаю, что могу вызвать указатель на функциюв коде c ++ / cli мне просто интересно найти правильный способ сделать это.Если я добавляю файл заголовка api dll и вызываю функции неявно, я сталкиваюсь с проблемой, что, если нативный помощник dll не находится в каталоге с управляемым dll, приложение бомб после первого вызова.( "AccessViolationException")