Во-первых, я новичок в COM, и в настоящее время довольно смущен. Я прочитал много документации по COM на MSDN и в общей сети, но многие из них кажутся устаревшими и чрезмерно сложными.Как создать HelloWorld COM Interop в Visual Studio 2012
Вот что я считаю необходимым, чтобы заставить его работать. Это еще не так, поэтому я уверен, что чего-то не хватает, но, давая свой рецепт, я надеюсь, что кто-то может решить проблему:
- Создайте проект приложения консоли C#. Я назову его CSharpApp
- Создайте проект ATL C++. Я называю это ComLib.Interop.
- Добавить класс (шаблон: ATL Simple Object), который я называю "InteropDemo"
- Ввиду класса, щелкните правой кнопкой мыши IInteropDemo и добавить метод HelloWorld.
- (Удален, продолжал держать нумерацию в ответах правильно.)
- Compile.
- Добавьте ссылку на ComLib.Interop.dll на CSharpApp.
- Вызов regsrv32.exe на скомпилированный DLL COM, а затем выберите DLL на вкладке COM в "Добавить ссылки ...
- В Program.cs, Main, создать класс InteropDemo и вызвать HelloWorld ,
- Прибыль.
Благодаря ответам, я обновил вопрос, чтобы отразить комбинированное решение.
Я не думаю, что вам нужны шаги 3, 4. Попробуйте без них. – Noseratio
Можно сказать, что сам COM устарел и чрезмерно сложный, следовательно, он больше не развивается. Если вы серьезно относитесь к разработке COM-серверов/объектов с C++, то я рекомендую вам получить книгу Essential COM от Don Box. Дон был гуру COM в конце 90-х и начале 2000-х годов, прежде чем он пошел на работу над первыми версиями WCF. Стоит его вес в золоте. –
@Noseratio Не работает, я получаю [эту ошибку] (http://tinypic.com/view.php?pic=2hob3f4&s=5#.UuJjpxA1haQ). Однако вызов tlbimp вручную в ComLib.Interop.dll работает, и я могу добавить ComLib.InteropLib.dll, сгенерированный tlbimp. Но потом я снова столкнулся с проблемой с регистрацией. Обновлен вопрос. – Wilbert