2015-10-24 3 views
0

мне нужно написать DLL (с ​​МСВС 2010 PS1), который вызывает функцию, экспортируемую из EXE-файла:Используя пустой указатель, полученный DllImport [МСВС C++ 2010]

(dll.h): extern "C" __declspec(dllimport) void* __stdcall SomeFunction(); 

Проблема заключается в том, что пустота указатель может указывать на любой тип данных и разработчики exe не предоставляют никаких рекомендаций по использованию этой функции. К счастью еха проект с открытым исходным кодом, и я могу видеть, что SomeFunction фактически возвращает указатель на структуру, которая объявлена ​​в structures.h файла, который используется для компиляции EXE-файла:

struct exeStructure {int useme; int usecallback; <...> }; 
  1. Как использовать эту информацию установить переменную usecallback из DLL? Не могли бы вы привести пример?
  2. Как мне разыменовать void * SomeFunction в exeStructure?
  3. Нужно ли копировать и включать файл structure.h в свой DLL-проект?
+0

Включите structures.h в проекте и отдать свою недействительный * правильный тип. –

ответ

0

Вы должны присвоить значение ничтожной * к exeStructure * типа.

Вы можете сделать это с помощью static_cast (лучше):

exeStructure * exeStrPtr = static_cast<exeStructure*>(voidPtr); 

Или через C-стиль литья (по существу же в действительности для этой цели, но не рекомендуется):

exeStructure * exeStrPtr = (exeStructure *)voidPtr; 

Тогда вы можете использовать правильный указатель, как и следовало ожидать.

exeStrPtr->usecallback = 1; 
exeStrPtr->useme = 334; 

Для получения более подробной информации о различиях между наиболее распространенными видами литья в C++ относится к this question: