Size: a a a

2020 March 26

MD

Mikhail Demchenko in pro.cxx
Constantine Drozdov
struct A;
void f(A* a, void (A::*f)()) {
   (a->*f)(); //OK o_O
}
Меня и волнует, является ли это UB
источник

CD

Constantine Drozdov in pro.cxx
Пойду перечитаю как вообще указатели на виртуальные функции работают
источник

MD

Mikhail Demchenko in pro.cxx
Constantine Drozdov
Пойду перечитаю как вообще указатели на виртуальные функции работают
Тут как бы даже указатели на просты, не виртуальные методы, вызывают сомнение
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Constantine Drozdov
struct A;
void f(A* a, void (A::*f)()) {
   (a->*f)(); //OK o_O
}
технически это будет выполненно как вызов члена, но это синтаксически не описание функции-члена
источник

CD

Constantine Drozdov in pro.cxx
Vyacheslav Olkhovchenkov
технически это будет выполненно как вызов члена, но это синтаксически не описание функции-члена
что?
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
f() -- это не функция-член класса A хотя ассемблерный код будет совпадать
источник

MD

Mikhail Demchenko in pro.cxx
https://godbolt.org/z/ZYjEZw - вот, кто-то может пояснить - что делает ассемблерный код?
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
в функцию будет передан указать на класс и смещение в этом классе (тот кто вызывает смещение знает, у него класс полный). если их сложить то получим тупо указатель на функцию. её и вызываем.
источник

CD

Constantine Drozdov in pro.cxx
Mikhail Demchenko
https://godbolt.org/z/ZYjEZw - вот, кто-то может пояснить - что делает ассемблерный код?
а, я, кажется, понял, в чем я ошибался в бинарном представлении
источник

CD

Constantine Drozdov in pro.cxx
видимо, vtbl кладется по нулевому смещению и расширяется vtbl первого предка при наследовании
источник

CD

Constantine Drozdov in pro.cxx
тогда vtbl самого класса фиксированно находится по нулевому смещению и нет проблемы, которую я указал выше
источник

CD

Constantine Drozdov in pro.cxx
тогда вызов по указателю будет через проверку на виртуальность, в случае виртуальной загрузка из vtbl
источник

EE

Eugene Erokhin in pro.cxx
Mikhail Demchenko
https://godbolt.org/z/ZYjEZw - вот, кто-то может пояснить - что делает ассемблерный код?
Указатель на метод это структурка из 2 полей. Содержимое собственно указателя на метод зависит от того метод виртуальный или нет, и в зависимости от этого кодируется. Можно подробности поискать на codeproject по C++ delegates.
источник

CD

Constantine Drozdov in pro.cxx
Eugene Erokhin
Указатель на метод это структурка из 2 полей. Содержимое собственно указателя на метод зависит от того метод виртуальный или нет, и в зависимости от этого кодируется. Можно подробности поискать на codeproject по C++ delegates.
Там до трех полей может быть
источник

MD

Mikhail Demchenko in pro.cxx
Eugene Erokhin
Указатель на метод это структурка из 2 полей. Содержимое собственно указателя на метод зависит от того метод виртуальный или нет, и в зависимости от этого кодируется. Можно подробности поискать на codeproject по C++ delegates.
Интересно, больше похоже на компактный указатель (там проверяется 1ый бит)
источник

EE

Eugene Erokhin in pro.cxx
Ну  ГГЦЦ и Шланг 2 поля на сколько помню, одно ток можно сказать мультиплексируется.
источник

EE

Eugene Erokhin in pro.cxx
Mikhail Demchenko
Интересно, больше похоже на компактный указатель (там проверяется 1ый бит)
Это кодирование виртуальный одним способом хранится (индекс в Втаблице) не виртуальный как просто адрес, и по нечетности смотрим
источник

D

Drunk in pro.cxx
Доброго времени суток!
Я написал код на C# и скомпилировал dll под CoreRT.
Как я могу загрузить .dll в C программе?

#define PathToLibrary "D:\\NativeLibrary.dll"
HINSTANCE handle = LoadLibrary(PathToLibrary);
   DWORD ErrorCode = GetLastError();
ErorCode выдаёт мне 126, how can i fix it?
источник

EE

Eugene Erokhin in pro.cxx
Точно не помню - но идея вроде так у адресов всегда младшие разряды 0, если бит выставлен то это  индекс в Втабли - 1. Могу ошибаться. А второе поле для коррекции this, но эт не точно)))
источник

D

Drunk in pro.cxx
Dll Export Viewer видит функцию в библиотеке, но при попытке LoadLibrary получаю 126 errorCode
источник