Comments 25
You are insane!
Я не знаток C#.
Попробуйте, пожалуйста, в вашей функции сделать что-нибудь, что требует managed окружения — бросить исключение, например?
Попробуйте, пожалуйста, в вашей функции сделать что-нибудь, что требует managed окружения — бросить исключение, например?
Или тред создать…
вы имеете ввиду функцию «FuncCSharp»??
Нет, я так понимаю, человек хочет попросить Вас провести эксперимент по использованию несколько более сложных функций из стандартного набора .NET
Да, именно из нее. Просто вы не передаете в нее явным образом никакого managed context'а, что может и должно привести к проблемам с исполнением настоящего управляемого кода (исключения, треды).
Как раз не должно. О потоках фреймворк позаботится за вас. Thread.Curent.ManagedId вернет корректный результат, и все прочие функции работы с потоками будут корректно работать.
вобщем, я попробовал(тред и исключение кинуть в функции)… как я и ожидал, ничего не случилось… программа как работала, так и работает… Собственно, ответ на ваш вопрос очень точно описан ниже человеком с ником — kekekeks
Вообще говоря в C# всё нормально с передачей в неуправляемый код указателей на функции и с колбеками из не ассоциированных с managed-окружением потоков. Т. е. оно вам и LPWSTR в System.String переведёт, и результат как надо сконвертит при желании. Единственное, чего нельзя никогда ни при каких обстоятельствах делать — это кидать исключения в unmanaged код из managed-кода и наоборот.
нормально все работает, у нас в аналоге FuncCSharp обращение к БД идет, проблем нет.
Эт вы ещё из C# не работали с псевдо-COM-интерфейсами, которые кидают E_NOTIMPL при попытке вызвать QueryInterface (кстати, это поделие было за авторством мелкомягких и весьма активно использовалось). А CLR его вызывает всегда при попытке скастовать что-либо к интерфейсу. В итоге пришлось ручками расковыривать vtable, создавать делегаты для указателей на методы, а потом ещё и оборачивать всё это безобразие, чтобы скрыть первый параметр. В общем, во взаимодействии managed и unmanaged кода много весёлых вещей есть.
очень интересный подход)
а не пробовали все-таки перевести это дело на C++/CLI?
а не пробовали все-таки перевести это дело на C++/CLI?
Проще описать интерфейсы в idl, после чего сгенерить из него входящей в SDK утилитой заголовки для C/C++ и tlbшку для .NET.
не пробовал… если честно, не очень его люблю… Да и задача была поставлена так, что писать именно на C#…
Поиск в интернете по теме вызова managed кода из unmanaged не принес должных плодов
Я конечно извиняюсь но запрос calling managed code from unmanaged вроде должный вариант первым линком выдает.
Я конечно извиняюсь но запрос calling managed code from unmanaged вроде должный вариант первым линком выдает.
Мне кажется эта статья была бы более уместна в блоге .NET
То есть статья просто о маршаллинге делегатов в указатели на функции? Может я оптимист, но от такого громкого названия ожидал большего.
перенес топик в .Net, где ему и место…
Sign up to leave a comment.
Вызов managed кода из unmanaged