如何通过命令行手动生成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) |