У меня есть сложная проблема, которую нужно решить, поскольку я застрял и не нашел никакого способа решить эту проблему. Вот кодВызвать функцию, беря объект стека в качестве аргумента с данными на основе кучи
struct MyStruct
{
int x;
float y;
char c;
};
void foo(MyStruct a_myStruct);
int _tmain(int argc, _TCHAR* argv[])
{
void *pMyStruct = malloc(sizeof(MyStruct));
int* pInt = (int*)pMyStruct;
*pInt = 10;
pInt++;
float *pFloat = (float*)pInt;
*pFloat = 2.545;
pFloat++;
char *pChar = (char*)pFloat;
*pChar = 'c';
_asm
{
pMyStruct
call foo
}
return 0;
}
void foo(MyStruct a_myStruct)
{
}
Здесь вы можете увидеть, что foo
работает на объекте в стеке и ожидает объект стека будет отображаться, когда foo
вызывается. Но, к сожалению, тип MyStruct
не известен во время компиляции, поэтому мне нужно создать блоки памяти, а затем во время выполнения данные заполняются внутри этого блока, который затем передается при вызове foo
с asm, как показано выше.
Теперь как преобразовать указатель пустоты кучи в объект типа стека. Так или иначе, если я получаю адрес аргумента a_myStruct
foo
, я могу указать void*
на это место, но снова не могу разыменовать void*
, чтобы он преобразовывался в объект типа MyStruct
.
Любой другой способ решения проблемы? Как и в C++, мы можем определить тип во время выполнения.
У меня есть проблема для вызова функции во время выполнения в C++, которые могут иметь подписи с полным определенным пользователем типов, которые не известны на этапе компиляции time.But детали этих типов доступны для меня (как я расшифровала детали определенного типа из библиотеки типов или из DIA SDK). Но главная проблема - теперь я хочу назвать эти функции во время выполнения. Во время компиляции у меня просто есть адрес функции и детали пользовательского типа, какой объект или указатель участвует в качестве аргумента этой сигнатуры функции. Теперь, если я хочу вызвать эту функцию во время выполнения, мне нужно сначала заполнить этот тип во время выполнения, создав временный блок в куче и заполнив этот блок данными. У меня есть все данные этого типа.
Теперь проблема заключается в том, что я не знаю, что функция принимает аргумент в качестве указателя того типа, у которого у меня есть данные, или этот аргумент точно является объектом стека этого типа. Если у меня есть указатель на этот тип, проблема не возникает, но если объект там, у меня есть большая проблема для вызова этой функции во время выполнения.
Что вы пытаетесь сделать здесь? Этот код не имеет абсолютно никакого смысла.Возможно, вы должны сделать шаг назад и объяснить реальную проблему, которую вы пытаетесь решить. –
Попытка применить структуру к указателям к типам, которые она имеет для переменных-членов, подразумевает, что вы не знаете, как работают структуры. Я с Джеймсом на этом. Этот код не имеет никакого смысла. –
Я подозреваю, что ОП пытается изменить член структуры того типа, к которому его бросают в каждом случае. Почему меня все еще озадачивает. –