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 }
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