GetProcAddress возвращает не то что ожидалось
От: AlexJH  
Дата: 13.07.09 00:05
Оценка: :))) :))
Я в смятении. Убил на эту проблему пол дня, но так и не нашёл вменяемого ответа.
MSDN говорит, что ф-ция GetProcAddress возвращает АДРЕС функции или переменной.
Но в ходе экспериментов обнаружилось, что это не так для массивов. Не буду голословным:

//----<dll>----
//создаём массив из 100 элементов, инициализируем
#pragma data_seg(".myseg")
extern "C" __declspec(dllexport) char path[100] = {0};
#pragma data_seg()
#pragma comment(linker, "/SECTION:.myseg,RWS")
//-----</dll>---

//----<приложение>----
//загружаем строку и меняем её наполнение
char* str = (char*) GetProcAddress( DllHandle, "path" );
strcpy(str,path);
//-----</приложение>---

Вот собственно и всё. Это работает, а иначе — никак.
Вместо того, чтобы получить указатель на массив, т.е. указатель на указатель, я получил лишь адрес первой ячейки массива.

Т.е. вместо адреса "path" мне подсунули адрес "path[0]".

В чём, собственно, дело? Хочу добавить, что если заменить в dll char
path[100]={0} на char* path="0", то всё кардинально изменится. Возвращаться, прям по MSDN, будет указатель на указатель.
getprocaddress
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.