Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5226286
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: 嵌入式

2010-09-19 13:43:57

如何通过命令行手动生成Interop.MessengerAPI.dll?


How to create Interop.MessengerAPI.dll by command line?


作者:金鸽     欢迎访问 sinodragon21.cublog.cn


背景:
《C# In A Nutshell》18.2节中调用Messenger API的例子如下:
你可以点击此处打开google图书《》

// RenameMe.cs - compile with:

// csc RenameMe.cs /r:Messenger.dll

// Run RenameMe.exe "new name" to change your name

// as it is displayed to other users.

// Run TlbImp.exe "C:\Program Files\Messenger\msmsgs.exe"

// to create Messenger.dll

using System;
using Messenger;
class MSNFun {
    static void Main(string[ ] args) {
        MsgrObject mo = new MsgrObject( );
        IMsgrService ims = mo.Services.PrimaryService;
        ims.FriendlyName = args[0];
    }
}


由于该书出版的日期较早,现在MSNMessenger已发生了很大的变化。自己的昵称(MyFriendlyName)已不能通过MSN API调用来修改,因为MyFriendlyName属性为只读。

Windows Live Messenger API 调用方法如下:

// Interop.MessengerAPI.dll 需使用 VS2008 [Project]->[Add Reference]导出
// cmdline 导出
Interop.MessengerAPI.dll 的方法请参考本文后面的说明。

// 编译方法 csc test.cs /r:Interop.MessengerAPI.dll /out:test.exe

using System;
using MessengerAPI;

namespace testwinform
{
    class MSNFun
    {
        static void Main(string[] args)
        {
            MessengerClass mco = new MessengerClass();
            
            Console.WriteLine(mco.MyFriendlyName);
        }
    }
}


如何通过 命令行 导出 Interop.MessengerAPI.dll?
Input: C:\Program Files\Windows Live\Messenger\msnmsgr.exe
Output:
Interop.MessengerAPI.dll
Tool: tlbimp.exe
CheckTool: ildasm.exe

msnmsgr.exe中包含8个com对象
//msnmsgr.exe
//Messenger Private Type Library
//Version: 1.0
MessengerPrivate;
GUID = {53CED51D-432B-45B2-A3E0-0CE2C24235D4};

//msnmsgr.exe/2
//Messenger API Type Library
//Version: 1.0
MessengerAPI;
GUID = {E02AD29E-80F5-46C6-B416-9B3EBDDF057E};

//msnmsgr.exe/3
//Messenger Dispatch Implementation
//Version: 1.0
DispImpl;
GUID = {9071135F-52C4-4D38-A787-2C5367CB5075};
... ...
... ...
//msnmsger.exe/8
//
//
ActivityPlatform;
GUID = {};

  • 如果你想通过cmdline导出MessengerPrivate的type library至Assembly中,使用:
tlbimp "C:\Program Files\Windows Live\Messenger\msnmsgr.exe" /namespace:MessengerPrivate /out:Interop.MessengerPrivate.dll

  • 如果你想通过cmdline导出MessengerAPI的type library至Assembly中,使用:
tlbimp "C:\Program Files\Windows Live\Messenger\msnmsgr.exe\2" /namespace:MessengerAPI /out:Interop.MessengerAPI.dll
  • 如果你想通过cmdline导出DispImpl的type library至Assembly中,使用:
tlbimp "C:\Program Files\Windows Live\Messenger\msnmsgr.exe\3" /namespace:DispImpl /out:Interop.DispImpl.dll

其他依次类推。

常见的错误:
我们新手常常使用
tlbimp "C:\Program Files\Windows Live\Messenger\msnmsgr.exe"试图生成 Interop.MessengerAPI.dll。

可以使用CheckTool: ildasm.exe查看自己生成的 Interop.MessengerAPI.dll 是否正确。比如:使用ildasm.exe分别打开
  • 自己通过命令行生成的Interop.MessengerAPI.dll 和
  • VisualStudio在幕后自动帮咱生成的 Interop.MessengerAPI.dll
如果结果一样,就说明正确了。

后记:如果哪位朋友知道 msnmsgr.exe\2 这种用法的细节,请告知在下,谢谢。
阅读(1404) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~