Как C ++ может импортировать DLL, созданную в C #? - PullRequest
2 голосов
/ 10 июля 2009

У меня есть DLL, созданная на C #, эта DLL содержит несколько предложений, таких как Creator.

Мне нужно загрузить эту DLL и использовать класс Creator в C ++, неуправляемый,

так есть ли какой-нибудь способ создать этот экземпляр, или я должен загрузить только те функции, которые доступны?

Мне нужно что-то вроде этого:

<code>
CreatorInstance->Init();

Это возможно?

Ответы [ 4 ]

4 голосов
/ 10 июля 2009

Большую часть того, что вам нужно, можно найти здесь: http://msdn.microsoft.com/en-us/library/x0w2664k%28VS.80%29.aspx

Прежде всего, вам нужно узнать о ключе / clr для компиляции C ++. Затем вам нужно понять расширения C ++, добавленные Microsoft, чтобы разрешить смешанные сборки. («Указатель» C ++ на управляемый класс будет использовать p ^ вместо p * и т. Д.)

2 голосов
/ 10 июля 2009

Подход Джона Фишера с использованием C ++ / CLI - безусловно, самый простой способ справиться с этим, но это не единственный способ.

Три других варианта:

1) Использование COM-взаимодействия для переноса класса .NET через COM

2) Вы можете разместить CLR в своем неуправляемом приложении и вызвать его. Подробнее см. в этой статье .

3) Вы можете разместить среду исполнения Mono и использовать ее для вызова управляемого кода. Подробнее об этом см. На этой странице .

Варианты 2 и 3 очень похожи, но IMO, 3 легче, чем 2.

1 голос
/ 10 июля 2009

Вот интересная статья о том, как этого добиться, не используя параметр / CLR

http://www.codeproject.com/KB/cs/ManagedCOM.aspx

Работает довольно хорошо.

0 голосов
/ 11 июля 2009

Прежде всего, это возможно, и вам не «нужно» использовать CLI или ключ / clr. Используя старую старую добрую архитектуру COM, вы можете сделать это довольно легко http://msdn.microsoft.com/en-us/library/zsfww439.aspx. Понимание того, как работает COM, может быть самой большой проблемой, но это полезно, когда вы это знаете.

...