C++ call COM written in C#_COMC++ call COM written in C#_#include_02COM
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Runtime.InteropServices;
 4 using System.Text;
 5 using System.Collections;
 6 
 7 namespace MyMessages
 8 {
 9     [Guid("DD5BB9C6-5980-4d1d-9BEB-7DC7FB126FFC")]
10     public interface IMessage 
11     {
12         string InnerText();
13     }
14 
15     [Guid("428D97B7-29A0-4e0b-8796-F4A27894F4FC")]
16     public interface IMessageCollection 
17     {
18         int GetCount();
19         IMessage GetMessage(int i);
20     }
21 
22     [ClassInterface(ClassInterfaceType.None)]
23     [Guid("60061B0E-DB0E-416a-B0D8-264E98595CF4")]
24     public class Message : IMessage
25     {
26         private string msg = string.Empty;
27         public Message() { }
28 
29         public Message(string s) 
30         {
31             this.msg = s;
32         }
33 
34         public string InnerText() 
35         {
36             return msg;
37         }
38     }
39 
40     [ClassInterface(ClassInterfaceType.None)]
41     [Guid("95DFAE86-4FF9-459a-A4C8-737565071D7C")]
42     public class MessageCollection : IMessageCollection 
43     {
44         private ArrayList array = new ArrayList();
45 
46         public MessageCollection() 
47         {
48             array.Add(new Message("aaa"));
49             array.Add(new Message("bbb"));
50             array.Add(new Message("ccc"));
51         }
52 
53         public int GetCount() 
54         {
55             return array.Count;
56         }
57 
58         public IMessage GetMessage(int i) 
59         {
60             return array[i] as IMessage;
61         }
62     }
63 }

 

 

C++ call COM written in C#_COMC++ call COM written in C#_#include_02Client
 1 // Client.cpp : Defines the entry point for the console application.
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <comutil.h>
 7 
 8 #import "E:\Demo\MyMessages\MyMessages\bin\Debug\MyMessages.tlb" raw_interfaces_only
 9 using namespace std;
10 using namespace MyMessages;
11 
12 int _tmain(int argc, _TCHAR* argv[])
13 {
14     CoInitialize(NULL);
15 
16     IMessageCollectionPtr pIColl(__uuidof(MessageCollection));
17 
18     long l = 0;
19     pIColl->GetCount(&l);
20     
21     for(int i=0; i<l; i++)
22     {
23         IMessagePtr pIMsg = NULL;
24         pIColl->GetMessage(i, &pIMsg);
25         BSTR s = ::SysAllocString(L"Test");
26         pIMsg->InnerText(&s);
27     
28         wprintf(L"%s\n", s);
29     }
30     
31     CoUninitialize();
32 
33     cin.get();
34     return 0;
35 }
36 
37