Всем привет. Проблема: Хочу установить указатель на функцию из внешней библиотеки. Вот мой код: Code (Text): #include <windows.h> #include <stdio.h> int main() { long hModule, lpFunction; long (*vbLenBstr)(OLECHAR*); char iop[]="AB"; printf("__vbaLenBStr Example\n\n"); hModule=(long)LoadLibrary("msvbvm60.dll"); lpFunction=(long)GetProcAddress((HMODULE)hModule,"DllFunctionCall"); vbLenBstr=(long)lpFunction; return 0; } Но компилятор выдает ошибку при обработке строки "vbLenBstr=(long)lpFunction;" (invalid conversion from `long int` to `long int (*)(OLECHAR*)`. Вопрос: Как мне правильно установить указатель на функцию.
чтобы вызвать функцию по указателю, надо писать (*func)(arg) при этом тип указателя должен быть long int (*)(OLECHAR*) как и говорит компилятор т.е. long int (*lpFunction)(OLECHAR*);
Не забываем про конвенцию вызова. А для простоты лучше объявить тип функции отдельно: typedef long __stdcall __vbaLenBStr_t(OLECHAR*); __vbaLenBStr_t* vbLenBstr; vbLenBstr = (__vbaLenBStr_t*)GetProcAddress((HMODULE)hModule,"DllFunctionCall"); Исходный вариант видимо предполагалось делать так: *(long*)&vbLenBstr=lpFunction; но это неправильно, long не всегда равен размеру указателя, надо использовать UINT_PTR