Как найти имя сборки вызывающего в неуправляемой DLL C ++ - PullRequest
2 голосов
/ 28 марта 2011

У меня есть неуправляемый c ++ dll . Я вызываю внешние методы этой неуправляемой dll из c # (.net 3.5)

Я ищу способ найти witch c # сборка вызывает мой неуправляемый c ++ dll (в мой c ++ dll) (по крайней мере, имя сборки)

И, конечно же, Я не хочу передавать какой-либо дополнительный параметр в методы .

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 28 марта 2011

Для этого требуется обход стека.Хорошо работает в управляемом коде, вот как реализована безопасность доступа к коду. не работает так хорошо, когда есть собственные кадры стека, которые нужно пройти.Вы можете попробовать StackWalk64 () в своем родном коде.Дорого и не так уж и хорошо, особенно в .NET 4.0, где CLR больше не подделывает модуль.Будьте очень осторожны с опцией оптимизации пропуска указателя кадра.

Не делай этого, я бы сказал.Это гораздо проще решить, просто разрешив управляемому коду передать дополнительный аргумент.

1 голос
/ 29 марта 2011

Наконец я нашел решение.

Я искал способ ограничить недопустимый доступ к моей неуправляемой DLL. Поэтому я просканировал трассировку стека для своего местоположения сборки вызывающей стороны.

Наконец я решил проверить токен открытого ключа сборки вызывающего (найденный таким образом) и проверить его.

Спасибо вам за время и ответы ...

0 голосов
/ 28 марта 2011

Ты не можешь знать.Ваши внешние методы могут вызываться любым C-совместимым языком, и поэтому в Windows и CRT нет ничего лишнего о языках CLR.

...