Я в смятении. Убил на эту проблему пол дня, но так и не нашёл вменяемого ответа.
MSDN говорит, что ф-ция GetProcAddress возвращает АДРЕС функции или переменной.
Но в ходе экспериментов обнаружилось, что это не так для массивов. Не буду голословным:
//----<приложение>----
//загружаем строку и меняем её наполнение
char* str = (char*) GetProcAddress( DllHandle, "path" );
strcpy(str,path);
//-----</приложение>---
Вот собственно и всё. Это работает, а иначе — никак.
Вместо того, чтобы получить указатель на массив, т.е. указатель на указатель, я получил лишь адрес первой ячейки массива.
Т.е. вместо адреса "path" мне подсунули адрес "path[0]".
В чём, собственно, дело? Хочу добавить, что если заменить в dll char
path[100]={0} на char* path="0", то всё кардинально изменится. Возвращаться, прям по MSDN, будет указатель на указатель.
AJH>Вот собственно и всё. Это работает, а иначе — никак. AJH>Вместо того, чтобы получить указатель на массив, т.е. указатель на указатель, я получил лишь адрес первой ячейки массива. AJH>Т.е. вместо адреса "path" мне подсунули адрес "path[0]".
адрес первого элемента это и есть адрес массива
кошмар, как managed code хавает мозги
Здравствуйте, AlexJH, Вы писали:
AJH>Вместо того, чтобы получить указатель на массив, т.е. указатель на указатель…
Это ошибочное предположение. Указатель — это указатель, а массив — это массив. Указатель на указатель и указатель на массив суть совершенно разные вещи.
Здравствуйте, AlexJH, Вы писали:
AJH>Вместо того, чтобы получить указатель на массив, т.е. указатель на указатель, я получил лишь адрес первой ячейки массива.