Собственно есть старенький проект на vc6 хочеться добавить некотрый функционал —
хочу сделать длл на шарпе и юзать ее из vc6 . собственно ддлку сделал но при
подключении типа — #import <test.dll> ругается — Cannot open type library file: 'test.dll': Ошибка при загрузке библиотеки.
дллка реализует только одну функцию и компилялась так — csc /target:library /out:test.dll test.cs
Поиском поискал вроде ничо не нашел — ткните пальцем пожалуйста
Спасибо
C>Собственно есть старенький проект на vc6 хочеться добавить некотрый функционал - C>хочу сделать длл на шарпе и юзать ее из vc6 . собственно ддлку сделал но при C>подключении типа — #import <test.dll> ругается — Cannot open type library file: 'test.dll': Ошибка при загрузке библиотеки. C>дллка реализует только одну функцию и компилялась так — csc /target:library /out:test.dll test.cs
dll-ка "на шарпе" это не машинные коды вовсе, не сможешь ты таким макаром ее заюзать из vc6, зато можешь зарегать ее как COM и использлвать с этой стороны при желании...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, carpenter, Вы писали:
А> dll-ка "на шарпе" это не машинные коды вовсе,
Есть подозрение что там гдето есть машинные коды
А> не сможешь ты таким макаром ее заюзать из vc6, зато можешь зарегать ее как COM и использлвать с этой стороны при желании...
как СОМ нет желания (со стороны кода упрощения не получиться ) типа не стоит того
C>Есть подозрение что там гдето есть машинные коды
Совершенно беспочвенное.
Машинные коды есть в runtime-е .net, который будет эту dll интерпретировать в машинные коды. Компрене ву?
C>Собственно есть старенький проект на vc6 хочеться добавить некотрый функционал - C>хочу сделать длл на шарпе и юзать ее из vc6 . собственно ддлку сделал но при C>подключении типа — #import <test.dll> ругается — Cannot open type library file: 'test.dll': Ошибка при загрузке библиотеки. C>дллка реализует только одну функцию и компилялась так — csc /target:library /out:test.dll test.cs C>Поиском поискал вроде ничо не нашел — ткните пальцем пожалуйста C>Спасибо
C>Собственно есть старенький проект на vc6 хочеться добавить некотрый функционал - C>хочу сделать длл на шарпе и юзать ее из vc6 . собственно ддлку сделал но при C>подключении типа — #import <test.dll> ругается — Cannot open type library file: 'test.dll': Ошибка при загрузке библиотеки. C>дллка реализует только одну функцию и компилялась так — csc /target:library /out:test.dll test.cs C>Поиском поискал вроде ничо не нашел — ткните пальцем пожалуйста C>Спасибо
Где-то в сети я встречал методу которая позволяла загружать managed code как native.
Как это сделать — нужно поискать, у меня где-то было, но суть была такая:
Компилируем managed .dll натравливаем на неё ldasm меняем какие-то флаги или чёт типа того и компилируем обратно.
Я попробовал проделать всё как написано и из native зделав LoadLibrary я отлично смог работать с managed .dll. Возможно там есть какие-то ограничения, но у меня работало.
Я даже написал GINA на C# подправив как было написало в статье Windows XP Pro отлично приняла её за native.
Если уж очень инетерстно, я поищу у себя.
Re[2]: Managed dll использование
От:
Аноним
Дата:
05.12.07 07:20
Оценка:
Здравствуйте, Norex, Вы писали:
N>Где-то в сети я встречал методу которая позволяла загружать managed code как native. N>Как это сделать — нужно поискать, у меня где-то было, но суть была такая: N>Компилируем managed .dll натравливаем на неё ldasm меняем какие-то флаги или чёт типа того и компилируем обратно.
N>Я попробовал проделать всё как написано и из native зделав LoadLibrary я отлично смог работать с managed .dll. Возможно там есть какие-то ограничения, но у меня работало. N>Я даже написал GINA на C# подправив как было написало в статье Windows XP Pro отлично приняла её за native.
N>Если уж очень инетерстно, я поищу у себя.
Здравствуйте, blind_petrik, Вы писали:
_>Здравствуйте, carpenter, Вы писали:
C>>Есть подозрение что там гдето есть машинные коды
_>Почитайте Рихтера. В этой длл-ке машинных кодов и близко нет.
Здравствуйте, blind_petrik, Вы писали:
C>>Есть подозрение что там гдето есть машинные коды
_>Почитайте Рихтера. В этой длл-ке машинных кодов и близко нет.
в DLL'ке машинные коды есть, эти коды состоят из передачи управления в CLR, во время этого вызова CLR компилит IL код в машинный и передает управление ему, т.е. по сути хоть код в DLL на IL, но он при загрузке DLL (LoadLibrary) незаметно превращается в машинные коды
Т.е. хотя managed DLL физически и не содержит внутри файла машинные коды экспортируемых методов, но машинный код они всетаки содержат, а на то что кода методов физически в файле не существует можно не обращать внимания, т.к. в момент первого вызова сработает машинный код вызова компиляции этого метода, который сформирует машинный код и будет произведена подмена вызова компиляции на вызов машинного кода метода.
Короче для программиста managed DLL особо ничем не отличается от обычной unmanaged. Единственное НО — есть подводные камни, связанные с использованием managed DLL написанных на разных версиях дотнет фреймворка... подводные камни связаны с тем, что в одном процессе нельзя использовать несколько фреймворков, т.е. нельзя одновременно загружать в процесс несколько DLL написанных на разных фреймворках.
Здравствуйте, _Morpheus_, Вы писали:
_M_>Здравствуйте, blind_petrik, Вы писали:
C>>>Есть подозрение что там гдето есть машинные коды
_>>Почитайте Рихтера. В этой длл-ке машинных кодов и близко нет.
_M_>в DLL'ке машинные коды есть, эти коды состоят из передачи управления в CLR, во время этого вызова CLR компилит IL код в машинный и передает управление ему, т.е. по сути хоть код в DLL на IL, но он при загрузке DLL (LoadLibrary) незаметно превращается в машинные коды
Детский сад. И что? И какое это имеет отношение к обсуждаемому вопросу? Ты как всегда в своем репертуаре.
Здравствуйте, _Morpheus_, Вы писали:
_M_>Т.е. хотя managed DLL физически и не содержит внутри файла машинные коды экспортируемых методов, но машинный код они всетаки содержат,
Ну, то есть ты обнаружил, что какие-то unmanaged коды там есть? И на основании этого ... нда....
_M_>а на то что кода методов физически в файле не существует можно не обращать внимания,
На здравый смысл, я так понимаю, тоже _M_>т.к. в момент первого вызова сработает машинный код вызова компиляции этого метода, который сформирует машинный код и будет произведена подмена вызова компиляции на вызов машинного кода метода.
Вызова чего, комрад? Откуда этот вызов возьмется?
_M_>Короче для программиста managed DLL особо ничем не отличается от обычной unmanaged.
Ржу пад сталом!
Ничем, кроме того, что использовать ее из-под unmanaged кода можно, фактически (если не предпринимать подвигов а-ля Геракл), только через взаимодействие посредством com-а. А так больше ничем не отличается, совершенно.
То-то и оно, что без загрузки .net runtime-а managed dll — это dll только формально.
Здравствуйте, mrozov, Вы писали:
_M_>>Короче для программиста managed DLL особо ничем не отличается от обычной unmanaged. M> M>Ржу пад сталом!
трава хорошая?
Когда ржачь пройдет и начнут работать мозги (если они есть), открой дизассемблером дотнетную сборку
ты увидишь что машинный код там есть:
EntryPoint:
JMP [mscoree!_CorExeMain]
это вызов который скомпилирует IL код в машинный и передаст ему управление. Аналогичный вызов будет стоять на всех точках входа экспортируемых функций.
После этого этот джамп будет заменен реальным машинным кодом. Если не заглядывать во внутренности DLL, то разницы в ее использовании, за исключением проблемы с версиями фреймворка, по сравнению с обычной DLL нет.
А перед тем как ржать и ставить минусы, почитай хотябы Рихтера чтобы не писать глупости.
Здравствуйте, _Morpheus_, Вы писали:
_M_>Здравствуйте, mrozov, Вы писали:
M>>Детский сад. И что? И какое это имеет отношение к обсуждаемому вопросу? Ты как всегда в своем репертуаре.
_M_>Самое непосредственное. Человека интересовало можно ли экспортировать функции из дотнет сборки, как в обычной DLL, ответ ДА, МОЖНО!
Подробное описание решения, которое нужно топикстартеру я уже писал здесь
Как видим все прекрасно работает из unmanaged кода, и при этом обращение к managed DLL ничем не отличается от от обращения к unmanaged DLL — код тотже самый.
Здравствуйте, carpenter, Вы писали:
C>Собственно есть старенький проект на vc6 хочеться добавить некотрый функционал - C>хочу сделать длл на шарпе и юзать ее из vc6 . собственно ддлку сделал но при C>подключении типа — #import <test.dll> ругается — Cannot open type library file: 'test.dll': Ошибка при загрузке библиотеки. C>дллка реализует только одну функцию и компилялась так — csc /target:library /out:test.dll test.cs C>Поиском поискал вроде ничо не нашел — ткните пальцем пожалуйста C>Спасибо