|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
Приветствую. Сразу оговорюсь - я новичок, и возможно задам глупый вопрос, но прошу отнестись с пониманием :) В общем, пишу в целях изучения C# и С++ - торрент клиент (ехе, на C#), который будет использовать dll (на С++) которая будет являться враппером над libtorrent (которая тоже на С++). У меня написан класс для логгирования в ехешнике. В моей дллке-враппере мне тоже потребуется логирование, и мне бы не хотелось выделять это логирование в отдельный файл, ибо в результате у меня будет два лог файла, и у каждого соответственно своя последовательность сообщений, а мне бы хотелось иметь единую последовательность сообщений в рамках единого лог файла. Поэтому, вопрос: можно ли как-то пробросить из ехешника в дллку [ссылку? указатель? ..?] на уже созданный и работающий логгер, а в самой дллке использовать эту ссылку/указатель/что-то ещё? И обращаясь к ней в дллке (аля Log(L"bla bla")), вызов/данные уходил бы в C#-овый ехешник в тамошний логгер и соответственно логируемое сообщение попадало бы в [единый] лог файл. Возможно ли такое сделать? Если да, можно ли увидеть пример? Заранее благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 04:26 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
Я сначала хотел сказать, что вызывать управляемый код из нативного невозможно, но задав верный вопрос - есть обходные пути См.2й ответ где список https://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c/778677#778677 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 09:52 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
SiemarglЯ сначала хотел сказать, что вызывать управляемый код из нативного невозможно, но задав верный вопрос - есть обходные пути См.2й ответ где список https://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c/778677#778677 или 5-й ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 09:56 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
Но вместо занятия нетривиальным хм.... Лучше вынести логирование на уровень выше - в основную программу. Вызывать нативный код DLL из c# попроще, чем наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 09:56 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
bnetrealmПоэтому, вопрос: можно ли как-то пробросить из ехешника в дллку [ссылку? указатель? ..?] на уже созданный и работающий логгер, а в самой дллке использовать эту ссылку/указатель/что-то ещё? И обращаясь к ней в дллке (аля Log(L"bla bla")), вызов/данные уходил бы в C#-овый ехешник в тамошний логгер и соответственно логируемое сообщение попадало бы в [единый] лог файл. Возможно ли такое сделать? да делегат в качестве callback для неуправляемого кода - не требует особых усилий https://msdn.microsoft.com/ru-ru/library/5zwkzwf4(v=vs.110).aspx внимательно примечание читать авторПри использовании делегата в вызове, среда CLR защищает делегат от процесса сбора мусора на протяжении всего вызова. Но если неуправляемая функция сохраняет делегат для использования после завершения вызова, необходимо предотвратить сборку мусора вручную до тех пор, пока неуправляемая функция не закончит работу с делегатом перевод кривой - смысл в защите конкретного экземпляра делегата от мусоросборщика ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 14:00 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
bnetrealm, враппер написать на C++/CLI. При этом можно и нативную dll свободно использовать и с C# легко взаимодействовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 18:04 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
если простого коллбэка недостаточно - можно COM интерфейс использовать ЗЫ как-то странно начинать изучение C# и С++ с интеропа ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 18:26 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
Я сначала хотел сказать, что вызывать управляемый код из нативного невозможно, но задав верный вопрос - есть обходные пути К сожалению, ничего не помогло. По сути, все советы сводятся к: а) Компилим С++-ную дллку как CLR (что мне не вариант, т.к. libtorrent тогда приходится компилить тоже как дллку (и тянуть за собой дллки boost'a), не получается её как либу запихнуть, а это в свою очередь тянет кучу других длл за собой, а мне бы хотелось чтобы у меня по минимому было внешних файлов) б) Делаем промежуточную C++/CLI дллку между чисто С++-ной дллкой, и чисто C#-повым приложением (такой расклад требуется в том числе если хочется идти COM-путем) Пожалуй единственный возможный - это делать pipe между ехешником и дллкой, но меня это решение немного смущает потенциальными задержками... по сути микро сервачок, а значит выносить его в отдельный low-prio поток, чтобы влиял по минимому (ведь по сути единственное его назначение - передавать лог-сообщение в ехешник, чтобы в свою очередь тот вывел это в лог файл), чесать репу что делать если пайпа вдруг не создасться и я (или пользователь допустим моего торрент клиента) останется без лога (и я не смогу узнать почему у него что-то не работает...), в общем, как-то не знаю, думается что я просто чего-то не замечаю по неопытности, и есть выход куда проще... путем делегатов может каких-нить как советовал выше Изопропил, вот тока его пример на сайте Microsoft что он скинул - там показано как передавать сообщения из ехешника в дллку, а мне то надо наоборот и как это сделать там это не показано :-\ Неужели таки нет простой возможности пообщаться с C#-опвым ехешником из чистой С++ (без /clr!) дллки? :-\ Либо я криво прочитал и всё неправильно понял? :-\ ЗЫ как-то странно начинать изучение C# и С++ с интеропа Ну, я скорее исхожу из того, что программирование изучается эффективнее всего, когда ты пытаешься написать то, что тебе написать элементарно интересно. Ну а это в свою очередь ведёт к тому, что на пути могут встречаться разные проблемы, к решению которых ты в том числе можешь быть не готов. Поэтому и обращаюсь за помощью к матёрым знатокам тут на форуме ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2017, 01:13 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
bnetrealmа мне бы хотелось чтобы у меня по минимому было внешних файлов) на это не стоит обращать внимание bnetrealmMicrosoft что он скинул - там показано как передавать сообщения из ехешника в дллку, а мне то надо наоборот и как это сделать там это не показано :-\ читайте внимательно - не сообщения передаются, а функция, которая может быть вызвана из c/c++ dll сообщение будет получено в c# коде bnetrealmНеужели таки нет простой возможности пообщаться с C#-опвым ехешником из чистой С++ (без /clr!) дллки? :-\ конечно есть ( более того с++./clr - зачастую не решает, а просто отодвигает проблему) давайте уточним, что имеется ввиду под "пообщаться" ? в коде враппера вызвать функцию c# ? - я собственно этот пример и приводил ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2017, 09:33 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
bnetrealm, так понятнее? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: 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. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2017, 10:44 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
Изопропил, Да, именно то что нужно! Спасибо)) Может у вас есть qiwi? Отблагодарить хоть немножко, за то что наглядно разжевали с примером :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2017, 21:50 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
bnetrealm, достаточно доброго слова )) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2017, 22:15 |
|
Логирование в C# ехе приложении из C++ дллки
|
|||
---|---|---|---|
#18+
Изопропил, Тогда номер кошелька добрых слов ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2017, 23:46 |
|
|
start [/forum/topic.php?fid=20&msg=39473985&tid=1399835]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 301ms |
total: | 537ms |
0 / 0 |