powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Порядок передачи параметров при вызове функции.
18 сообщений из 68, страница 3 из 3
Порядок передачи параметров при вызове функции.
    #39740835
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserТолько если это мембер функция класса, то первым параметром всегда должна передаваться
ссылка на объект класса.

Кстати, чисто из любопытства: как ты умудрился экспортировать отдельный метод класса?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39740857
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserBarloneНу если возвращаемое значение не лезет в регистр, то первым параметром передается указатель на место в памяти, где будет помещен результат.
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#return-value

Это все понятно.
Только если это мембер функция класса, то первым параметром всегда должна передаваться ссылка на объект класса.
А когда я обращаюсь к функции после получения её адреса через GetProcAddress, первым параметром лезет именно возвращаемой значение. И происходит падение.

Думал сделать это через встроенный ассемблер, но оказалось что Itanium и X64 не поддерживают его.

За ссылку спасибо.Ну если вы все равно вручную описываете импортированный из dll метод класса как обычную функцию, так опишите ее как принимающую еще один указатель, куда будет сложен результат, и возвращающую void.
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39740866
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настоящее веселье будет, если класс который в dll, использует множественное наследование...
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39740887
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovblonduserТолько если это мембер функция класса, то первым параметром всегда должна передаваться
ссылка на объект класса.

Кстати, чисто из любопытства: как ты умудрился экспортировать отдельный метод класса?


Приводил кусок года именно для вас 21747788
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39740892
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneНу если вы все равно вручную описываете импортированный из dll метод класса как обычную функцию, так опишите ее как принимающую еще один указатель, куда будет сложен результат, и возвращающую void.

И это уже было 21748888
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39740908
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserПриводил кусок года именно для вас

Это не код экспорта . Это код импорта . Совсем разницы не замечаешь?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39740910
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovblonduserПриводил кусок года именно для вас

Это не код экспорта . Это код импорта . Совсем разницы не замечаешь?..


Экспортируются они все. Импортируются только те что необходимы.
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39740924
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserЭкспортируются они все.

КАК???
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39741000
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserBarloneНу если вы все равно вручную описываете импортированный из dll метод класса как обычную функцию, так опишите ее как принимающую еще один указатель, куда будет сложен результат, и возвращающую void.

И это уже было 21748888 так если у класса нетривиальный конструктор и деструктор, передавать надо не готовый экземпляр (для него не вызовется деструктор), а указатель на неинициализированный кусок памяти.
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39741011
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovblonduserЭкспортируются они все.

КАК???
Ну mfc же как-то собирается в виде dll...
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39741015
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39741293
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneНастоящее веселье будет, если класс который в dll, использует множественное наследование...достаточно наличия в классе виртуальных функций
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39743682
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyСпособ линковки вообще не причем.
У вас разные вызовы синтаксически. В одном случае вы вызываете метод, в другом - свободную функцию.
Чтобы во втором случае тоже вызывалось как метод, вам нужно объявить указатель на метод, а не на функцию (при условии что в вашей DLL это действительно метод).

Код: plaintext
1.
2.
3.
4.
typedef Result (Class::*pFunction)(); 

pFunction pFunctionCall = (pFunction)GetProcAddress(hLibrary, MAKEINTRESOURCEA(616)); // ParserFile;
this->*pFunctionCall();



Всё получилось почти по приведенному примеру и благодаря небольшому напильнику.
Проверил для не виртуальных функций.
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39743785
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserКто подскажет, как сделать так что бы параметры во втором случае передавались так же как в первом?

Способ и порядок передачи параметров в фукнцию и возвращаемых значений из функции в С++ не определён.
Полагаться на это -- будет программа с UB.
Так что ты не должен просто закладываться на это .

Кроме этого, есть RVO, copy ellision и встраивание, где ты вообще ничего можешь не передавать никуда.
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39743788
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserLeonid Kudryavtsev,

Всё вызывается с __cdecl, но не помогает.

Гы, это как это?
вызывается с __cdecl, а написано?
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39743791
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0Рекомендую глянуть книгу
Рихтер
"WINDOWS для профессионалов"
там многое чаво интересного узнаете, в том числе и по библиотекам...

Ему лучше не надо!
Он и так лезет туда, куда ему рано.
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39743807
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕму лучше не надо!
Он и так лезет туда, куда ему рано.

Еще один психолог. Какое ограничение по возрасту 6+?
Где вас учат давать бесполезные советы?
Уже все сделано и работает.
...
Рейтинг: 0 / 0
Порядок передачи параметров при вызове функции.
    #39743908
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

имхо - люди не способные сами решать мелкие затыки всегда будут находиться на позиции просящих и платящих. тем более не хотящие услышать. профессионала от лоха отличает именно реакция на подсказку - профи достаточно намёка (и будет благодарен!!!) на вероятную возможность либо вектор поиска.... посему считаю что готовые конфеты в рот бесполезны, развращают и могут размножать ошибки, помимо решений.

как то так...
(круглый)
...
Рейтинг: 0 / 0
18 сообщений из 68, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Порядок передачи параметров при вызове функции.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]