Как преобразовать INT_PTR в указатель структуры или структуры в c - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь вызвать функцию из DLL в c программе. функция возвращает указатель на структуру, но когда я пытаюсь вызвать эту функцию с помощью функции GetProcAddress, она возвращает INT_PTR.

HMODULE hDll = LoadLibrary("C:\\path-of-dll\library.dll");
  if(!hDll){
}else{
 FARPROC fn = GetProcAddress(hDll,"function-name");
  if(!fn){
    printf("\n Could not find function address");
  }else{
    INT_PTR storingvalue = fn(&chararray1[0],&chararray2[0],&chararray3[0]);
  }
}

fn вернет указатель на структуру. Структура {Указатель на другую структуру, Указатель на другую структуру} Вопрос Q1) Как я могу преобразовать INT_PTR в указатель структуры и извлечь данные из того же указателя?

1 Ответ

0 голосов
/ 06 апреля 2020

Для этого потребуется приведение, и оно будет зависеть от того, какое именно значение возвращает функция на самом деле.

Если значение на самом деле является "struct foo *" (что, вероятно, с учетом вашего описания), тогда :

struct foo * ptr = (struct foo *)storingvalue;

независимо от того, какой-то тип приведения будет необходим (как и возвращаемое значение GetProcAddress во всех случаях, кроме самых простых).

Если вам нужен результат только в одном Выражение вы можете сделать следующим образом:

((struct foo *)storingvalue)->member
...