Странная ошибка
От: SSTU_user  
Дата: 12.11.05 16:24
Оценка:
Вопрос такой: есть dll в которой есть функция foo
===================================
__declspec(dllexport)
int foo(struct bar *s)
{
s = &some_struct; // some_struct объявлена ранее. по типу совпадает с s
return 0;
}
===================================

Так вот в таком вызове этой функции:

====================================
...// загружаем dll

struct bar *t=NULL;
FARPROC foo_proc;

foo_proc = GetProcAddress(dll, "foo");

foo_proc(t);
===================================

t по-прежнему указывает на NULL. Но если у библиотечной функции foo параметр задать
не как struct bar* , а , например, как int* или char*, то все происходит нормально.
Может быть требуется как то особо указать способ передачи параметров функции? Где я ошибся?
Re: Странная ошибка
От: Alex Fedotov США  
Дата: 12.11.05 16:47
Оценка:
Здравствуйте, SSTU_user, Вы писали:

SST>Вопрос такой: есть dll в которой есть функция foo


SST>__declspec(dllexport)
SST>int foo(struct bar *s)
SST>{
SST>    s = &some_struct; // some_struct объявлена ранее. по типу совпадает с s
SST>    return 0;
SST>}

SST>Так вот в таком вызове этой функции:

SST>...// загружаем dll

SST>struct bar *t=NULL;
SST>FARPROC foo_proc;

SST>foo_proc = GetProcAddress(dll, "foo");

SST>foo_proc(t);

SST>t по-прежнему указывает на NULL. Но если у библиотечной функции foo параметр задать
SST>не как struct bar* , а , например, как int* или char*, то все происходит нормально.
SST>Может быть требуется как то особо указать способ передачи параметров функции? Где я ошибся?

Простите,а чего вы ожидаете. Вы локальной переменной s присваиваете какое-то значение, естественно его не видно снаружи функции, DLL тут не при чем. Если вы хотите вернуть наружу адрес, то должно быть написано примерно так:

int foo(struct bar **s)
{
  *s = &some_struct;
  return 0;
}

...

foo_proc(&t);
-- Alex Fedotov
Re[2]: Странная ошибка
От: Аноним  
Дата: 12.11.05 19:37
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

SST>>t по-прежнему указывает на NULL. Но если у библиотечной функции foo параметр задать

SST>>не как struct bar* , а , например, как int* или char*, то все происходит нормально.
SST>>Может быть требуется как то особо указать способ передачи параметров функции? Где я ошибся?

AF>Простите,а чего вы ожидаете. Вы локальной переменной s присваиваете какое-то значение, естественно его не видно снаружи функции, DLL тут не при чем. Если вы хотите вернуть наружу адрес, то должно быть написано примерно так:


AF>[c]

AF>int foo(struct bar **s)
AF>{
AF> *s = &some_struct;
AF> return 0;
AF>}

Верно. Век живи — век учись. Спасибо за помощь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.