|
Как правильно сделать "обертку" для функции
|
|||
---|---|---|---|
#18+
Есть функция , весьма универсальная функция - что только не делает. На вход хочет параметр, а на выходе дает структуру (разные структуры), заполненные в зависимости от значения параметра. Вот только функция эта сишная, и вызов ее сопряжен с кучей лишних строк вроде "маршал", "трай", и т.д. Потому решил сделать для нее обертку, чтобы вызывать по человечески. Получилось что-то вроде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Все вроде работает, пока внутренняя функция нормально отрабатывает, а вот если она выдает фальш, то возвращается default(T); и всю малину портит. Вот думаю как это переделать? Возвращать bool , а структуру через out ? Или может быть еще как лучше? ЗЫ ну и заодно вопрос для самоубеждения: Marshal.PtrToStructure создает копию структуры, и она доступна после Marshal.FreeHGlobal или только отображает структуру на память, и после освобождения памяти структуре пушной зверек? А то в майкрософтсовской документации неочень понятно написано "Маршалирует данные из неуправляемого блока памяти в управляемый объект." ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 16:02 |
|
Как правильно сделать "обертку" для функции
|
|||
---|---|---|---|
#18+
iskatelsql Возвращать bool , а структуру через out ? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 16:25 |
|
Как правильно сделать "обертку" для функции
|
|||
---|---|---|---|
#18+
Shocker.Pro Что мешает возвращать кортеж? я на 2015 студии, она вроде как не поддерживает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 16:32 |
|
Как правильно сделать "обертку" для функции
|
|||
---|---|---|---|
#18+
Что мешает обновить студию? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 17:42 |
|
Как правильно сделать "обертку" для функции
|
|||
---|---|---|---|
#18+
обычный TryGet паттерн же bool TryGetData(arg, out T value) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 20:10 |
|
Как правильно сделать "обертку" для функции
|
|||
---|---|---|---|
#18+
iskatelsql Есть функция , весьма универсальная функция - что только не делает. На вход хочет параметр, а на выходе дает структуру (разные структуры), заполненные в зависимости от значения параметра. Вот только функция эта сишная, и вызов ее сопряжен с кучей лишних строк вроде "маршал", "трай", и т.д. Потому решил сделать для нее обертку, чтобы вызывать по человечески. Получилось что-то вроде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Все вроде работает, пока внутренняя функция нормально отрабатывает, а вот если она выдает фальш, то возвращается default(T); и всю малину портит. Вот думаю как это переделать? Возвращать bool , а структуру через out ? Или может быть еще как лучше? ЗЫ ну и заодно вопрос для самоубеждения: Marshal.PtrToStructure создает копию структуры, и она доступна после Marshal.FreeHGlobal или только отображает структуру на память, и после освобождения памяти структуре пушной зверек? А то в майкрософтсовской документации неочень понятно написано "Маршалирует данные из неуправляемого блока памяти в управляемый объект." да, а тут ни кучи "маршал", ни "трай" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2020, 10:39 |
|
|
start [/forum/topic.php?fid=20&fpage=8&tid=1398466]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 273ms |
total: | 396ms |
0 / 0 |