Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters

Reply
 
Thread Tools

call function in managed DLL (C#) from unmanaged C++ ... ?
Old 05.12.2006, 20:11   #1
I can seeee~ you !~!~!
 
Xman's Avatar
 
Join Date: 12 2004
Location: now in Yerevan
Posts: 173
Rep Power: 0
Thumbs up call function in managed DLL (C#) from unmanaged C++ ... ?

Provet vsem, kto nibud' delal takoe ?
skajem ya imeyu DLL sdelanni v dot.net i mne nado sdelat' druguyo dll napisanni na C++ (jelatelno v Borland C++) kotori budet v sebe imet' funkciyu kotoraya v svoyu ochered' doljen vizivat' funkciayu v DLL zdelanni na dot.net (C#).
__________________
...big space=>cool gap=>wolf's cry=>dark Night;}

Old 05.12.2006, 20:45   #2
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

а какая разница чем сделан длл, он и в Африке длл
1. LoadLibrary()/GetModuleHandle()
2. GetProcAddress()
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 05.12.2006, 21:47   #3
Академик
 
TigrOm's Avatar
 
Join Date: 06 2004
Location: Yerevan
Posts: 9,326
Rep Power: 7
Default

http://www.codeproject.com/csharp/ManagedCOM.asp

вне COM не пробовал.
Может быть не все гладко с трвиальным LoadLibrary, что связано с иной логикой загрузки .NET приложений.

Old 06.12.2006, 07:45   #4
Школьник
 
Junior's Avatar
 
Join Date: 08 2004
Location: Armenia
Age: 42
Posts: 246
Rep Power: 0
Default

Indz tvum a ughigh kanchel hnaravor chi (LoadLibrary()/GetModuleHandle()). Porci .NET dll-i vra COM Wrapper sarqel, u dra mijocov C++-ic kanchel.
Isk amenachisht@-es kargi harcer@ Microsoft-i forumnerum taln a.
http://forums.microsoft.com/msdn/default.aspx?siteid=1
__________________
One way, or another, I'm gonna get You...
From a song.

Old 06.12.2006, 07:49   #5
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

Да, надо писать КОМ враппер.
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 06.12.2006, 07:52   #6
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

TigrOm джан, а разве .нет или любые другие вин-приложения не загружаются по одному и тому же принципу, согласно PE формату? Единственная проблема что я вижу с LoadLibrary()/GetProcAddress(), это что сигнатура С# функции котороую надо вызвать из C++, должна иметь исключительно POD-types в качестве формальных параметров и возвращаемого значения, и не иметь чисто C#-ские классы, потому как неизвестно какой C++ класс ему должен соответствовать, да и в принципе может ли?
Не понимаю одного, зачем все смешивать, пусть либо будет только C# длл-ки, либо C++-шные.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 06.12.2006, 07:54   #7
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

Quote:
Originally Posted by AvDav View Post
TigrOm джан, а разве .нет или любые другие вин-приложения не загружаются по одному и тому же принципу, согласно PE формату? Единственная проблема что я вижу с LoadLibrary()/GetProcAddress(), это что сигнатура С# функции котороую надо вызвать из C++, должна иметь исключительно POD-types в качестве формальных параметров и возвращаемого значения, и не иметь чисто C#-ские классы, потому как неизвестно какой C++ класс ему должен соответствовать, да и в принципе может ли?
Не понимаю одного, зачем все смешивать, пусть либо будет только C# длл-ки, либо C++-шные.
Нет. Там в ПЕ хидере идет ссылка на .нет загрузчик. Который уже подгружает метадату и работает другим способом
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!

Old 06.12.2006, 08:08   #8
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

Оппыньки
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 06.12.2006, 08:19   #9
Академик
 
TigrOm's Avatar
 
Join Date: 06 2004
Location: Yerevan
Posts: 9,326
Rep Power: 7
Default

Quote:
Originally Posted by AvDav View Post
TigrOm джан, а разве .нет или любые другие вин-приложения не загружаются по одному и тому же принципу, согласно PE формату? Единственная проблема что я вижу с LoadLibrary()/GetProcAddress(), это что сигнатура С# функции котороую надо вызвать из C++, должна иметь исключительно POD-types в качестве формальных параметров и возвращаемого значения, и не иметь чисто C#-ские классы, потому как неизвестно какой C++ класс ему должен соответствовать, да и в принципе может ли?
Не понимаю одного, зачем все смешивать, пусть либо будет только C# длл-ки, либо C++-шные.
Поясню что я имел ввиду:

При загрузке любых модулей с PE, система распознает что именно должно происходить с exe/dll модулем, а именно при загрузке управляемой сборки в неуправляемый поток приложения система иницализирует CLR, при этом создавая домен приложаения для управляемой сборки и доменно-нейтральные "сборки" для неуправляемого кода. Взаимодействие же через границы сборок может происходить только путем маршалинга. Вызывающий неуправляемый код ничего не знает о способах сериалкизации/маршалинга типов/вызовов управляемого кода. Отсюда и потребность в COM wrapper-e.


А загрузка с PE ессно происходит одинаково с точки зрения системы, о чем речь? Но вот что потом?

П.С. Кроме того элементарного экспортирования функций из модулей управляемого кода в формате "dllexport" я не обнаружил. Вызов функций управляемого кода происходит видимо по аналогии с COM вызовами, через "фабрику классов".

Old 06.12.2006, 08:20   #10
Академик
 
TigrOm's Avatar
 
Join Date: 06 2004
Location: Yerevan
Posts: 9,326
Rep Power: 7
Default

Quote:
Originally Posted by Agregat View Post
Нет. Там в ПЕ хидере идет ссылка на .нет загрузчик. Который уже подгружает метадату и работает другим способом
Ну да, но все это происходит автоматически.
Т.е. видимо вызывая LoadLibrary, все должно сработать.

Old 06.12.2006, 08:22   #11
Кандидат
 
Wedge's Avatar
 
Join Date: 09 2005
Location: Yerevan
Age: 49
Posts: 1,151
Rep Power: 4
Default

Use the Assembly Registration tool (Regasm.exe)

The Assembly Registration tool reads the metadata within an assembly and adds the necessary entries to the registry, which allows COM clients to create .NET Framework classes transparently.

Old 06.12.2006, 08:25   #12
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

Ok, спасибо за пояснение.
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 06.12.2006, 08:27   #13
Кандидат
 
Wedge's Avatar
 
Join Date: 09 2005
Location: Yerevan
Age: 49
Posts: 1,151
Rep Power: 4
Default

Quote:
Originally Posted by AvDav View Post
а какая разница чем сделан длл, он и в Африке длл
1. LoadLibrary()/GetModuleHandle()
2. GetProcAddress()
Не согласен.
Dot Net-овский dll это нечто совсем иное, чем обычный.

Old 06.12.2006, 08:29   #14
Ego coder
 
AvDav's Avatar
 
Join Date: 07 2004
Location: Yerevan, Armenia
Age: 44
Posts: 3,738
Rep Power: 5
Default

ну я от дот-нета очень далек, поэтому это первое что пришло в голову
__________________
Каждый сам кузнец своего счастья, и несчастья тоже.

Old 06.12.2006, 08:32   #15
Академик
 
TigrOm's Avatar
 
Join Date: 06 2004
Location: Yerevan
Posts: 9,326
Rep Power: 7
Default

Quote:
Originally Posted by AvDav View Post
ну я от дот-нета очень далек, поэтому это первое что пришло в голову
вообще, технологии стараются делать такими чтоб можно было без значительных усилий пользоваться некими общими принципами/правилами. Так что вектор мыслей в принципе тебя бы привел к решению проблемы
Reply




Реклама:
реклама
Buy text link .

All times are GMT. The time now is 17:35.
Top

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.