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
Re: GetProcAddress возвращает не то что ожидалось
От: Аноним  
Дата: 13.07.09 00:18
Оценка: 1 (1) +3
AJH>Вот собственно и всё. Это работает, а иначе — никак.
AJH>Вместо того, чтобы получить указатель на массив, т.е. указатель на указатель, я получил лишь адрес первой ячейки массива.
AJH>Т.е. вместо адреса "path" мне подсунули адрес "path[0]".
адрес первого элемента это и есть адрес массива
кошмар, как managed code хавает мозги
Re: GetProcAddress возвращает не то что ожидалось
От: achp  
Дата: 13.07.09 01:04
Оценка: 3 (1) +1
Здравствуйте, AlexJH, Вы писали:

AJH>Вместо того, чтобы получить указатель на массив, т.е. указатель на указатель…


Это ошибочное предположение. Указатель — это указатель, а массив — это массив. Указатель на указатель и указатель на массив суть совершенно разные вещи.

Когда-то давно я написал об этом здесь: http://rsdn.ru/forum/cpp/718959.1.aspx
Автор: achp
Дата: 13.07.04
Re: GetProcAddress возвращает не то что ожидалось
От: Кодёнок  
Дата: 13.07.09 06:00
Оценка:
Здравствуйте, AlexJH, Вы писали:

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


Массив — это НЕ указатель.
Re: GetProcAddress возвращает не то что ожидалось
От: _kostet_ Россия  
Дата: 13.07.09 12:34
Оценка:
On 07/13/2009 04:05 AM, AlexJH wrote:
>
[]

указатель на массив == указатель на первый элемент массива
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.