使用飞信SDK开发短信收发程序

http://hi.baidu.com/rarnu/blog/item/c365237f63b5db0e29388a31.html

Visual Basic 2005 飞信SDK开发短信收发程序

欢迎转载,本文转自[田草博客www.tiancao.net] 原文链接:http://www.tiancao.net/blogview.asp?logID=646

http://www.tiancao.net/blogview.asp?logID=646

我的第一个SDK作品:过年有空用SDK写了一个M8用的飞信,不过还不太好用,欢迎测试

http://bbs.meizu.com/thread-783641-1-1.html

.NET - C# - Delphi - 使用飞信SDK(FetionSDK)开发短信收发程序(飞信客户端开发)

http://sites.google.com/site/iworknotes/net/net-c-delphi-shiyongfeixinsdkfetionsdkkaifaduanxinshoufachengxufeixinkehuduankaifa

利用飞信的协议可以在线收发消息,或是向手机发送消息。由此,可以自己来完成一个IM工具。

本文即是对飞信SDK的使用方法,及如何开发作一个说明。

FetionSDK下载:http://sites.google.com/site/allwealthshare/software

一、引用FetionSDK

飞信是采用C#开发的,所有的程序集均是.NET,因此我们也需要使用Delphi.NET/Chrome来进行相关的开发。在Chrome中,新建一个工程,并引入FetionSDK.dll,当然您也可以使用Delphi2007 for .NET,开发出来结果一样。

其实我曾尝试过把FetionSDK.dll变成一个COM+程序,但是不巧的是这个dll没有strong name,无法转换。

引用完SDK后,在主窗体的uses下添加NullStudio.Fetion_SDK。

二、准备工作

准备工作很简单,在public区分符下,建立一个名为sdk的FetionSDK对象。然后为它创建一个实例。

三、用户登录

使用以下代码来填入用户名和密码:

sdk.AccountManager.FillUserIdAndPassword(UserID,Password,true);

三个参数分别是用户手机号,密码,是否自动登录,当选定了自动登录为True时,可以使用

sdk.AccountManager.LoginOrLogout();

来自动的判断是登录或是注销,否则的话,就要使用

sdk.AccountManager.Login(); 来登录。

四、状态改变

用户登录或注销,或是改变自己当前的状态时,会触发状态改变的事件。如下:

procedure sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);

其中参数e中来自命名空间Imps.Client.Core。

然后我们绑定这个事件:

sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(sdk_SDK_UserSatusChange);

这样SDK就能接收到状态改变的事件了。另外,还能针对各个状态,执行不同的指令,如下:

case e.NewStatus of

Imps.Client.UserAccountStatus.Disconnected: ;

Imps.Client.UserAccountStatus.Initialized: ;

Imps.Client.UserAccountStatus.Loginning: ;

Imps.Client.UserAccountStatus.Logon:

Imps.Client.UserAccountStatus.Logoff: ;

Imps.Client.UserAccountStatus.Logouting: ;

Imps.Client.UserAccountStatus.None: ;

Imps.Client.UserAccountStatus.OfflineLogon: ;

Imps.Client.UserAccountStatus.StandBy: ;

Imps.Client.UserAccountStatus.WaitReconnect: ;

else

end;

五、获取好友列表

var

lst : List<Contact>;

i: Integer;

begin

lstFriendLst.Items.Clear();

lst := sdk.ContactControl.getAllContactList();

for i := 0 to lst.Count - 1 do

begin

lstFriendLst.Items.Add(

string.Format("{0} [Fetion: {1} Mobile: {2}]",

lst[i].DisplayName, lst[i].Uri.Id,

IfThen(lst[i].PersonalInfo.MobileNo = string.Empty, "Not Published", lst[i].PersonalInfo.MobileNo)));

end;

六、发送消息

调用SDK的发送消息指令,传入的参数分别是对方手机号码和短信的内容。

sdk.ContactControl.SendIM.SendIM(edtPhoneNo.Text, edtSendMsg.Text);

七、接收消息

接收到消息时,会解发SDK的收到消息事件,如下:

procedure sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);

实现此方法后,绑定这个事件。

sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);

八、发送手机短信

与发送消息一样,只不过使用的是另一个方法。

sdk.ContactControl.SendSMS.SendSMS(sdk.ContactControl.getMyself.Uri.Id,edtSendMsg.Text);

在这里需要注意SendIM与SendSMS的区别。

getMyself是SDK中的一个方法,用来获取当前用户的信息。

九、出错事件

当SDK因为某种原因出错后,会触发出错事件,如下:

procedure sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);

实现后绑定:

sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(sdk_SDK_Error);

十、编译,执行程序

现在可以编译并执行程序了。

返回文章首页
十一、程序源码

namespace FetionDemo;

interface

uses

System.Windows.Forms,

System.Drawing,

Imps.Client.Core,

NullStudio.Fetion_SDK,

NullStudio.Fetion_SDK.Event,

System.Collections.Generic;

type

/// <summary>

/// Summary description for MainForm.

/// </summary>

MainForm = class(System.Windows.Forms.Form)

{$REGION Windows Form Designer generated fields}

private

btnSendSelf: System.Windows.Forms.Button;

edtPhoneNo: System.Windows.Forms.TextBox;

btnSend: System.Windows.Forms.Button;

edtSendMsg: System.Windows.Forms.TextBox;

sbMain: System.Windows.Forms.StatusStrip;

lblPassword: System.Windows.Forms.Label;

lblAccount: System.Windows.Forms.Label;

edtMsg: System.Windows.Forms.TextBox;

lblPhoneNo: System.Windows.Forms.Label;

gbMsg: System.Windows.Forms.GroupBox;

lstFriendLst: System.Windows.Forms.ListBox;

gbFriendLst: System.Windows.Forms.GroupBox;

edtPassword: System.Windows.Forms.TextBox;

edtUserID: System.Windows.Forms.TextBox;

lblError: System.Windows.Forms.ToolStripStatusLabel;

btnLogoff: System.Windows.Forms.Button;

btnLogin: System.Windows.Forms.Button;

lblStatus: System.Windows.Forms.ToolStripStatusLabel;

gbLogin: System.Windows.Forms.GroupBox;

components: System.ComponentModel.Container := nil;

method InitializeComponent;

{$ENDREGION}

private

method btnSendSelf_Click(sender: System.Object; e: System.EventArgs);

method btnSend_Click(sender: System.Object; e: System.EventArgs);

method btnLogoff_Click(sender: System.Object; e: System.EventArgs);

method btnLogin_Click(sender: System.Object; e: System.EventArgs);

method MainForm_Load(sender: System.Object; e: System.EventArgs);

protected

method Dispose(aDisposing: boolean); override;

function IfThen(ABool: Boolean; AStr1, AStr2: String): String;

public

sdk : FetionSDK;

bLogon: Boolean;

procedure sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);

procedure sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);

procedure sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);

constructor;

end;

implementation

{$REGION Construction and Disposition}

constructor MainForm;

begin

//

// Required for Windows Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

end;

method MainForm.Dispose(aDisposing: boolean);

begin

if aDisposing then begin

if assigned(components) then

components.Dispose();

//

// TODO: Add custom disposition code here

//

end;

inherited Dispose(aDisposing);

end;

{$ENDREGION}

{$REGION Windows Form Designer generated code}

method MainForm.InitializeComponent;

begin

var resources: System.ComponentModel.ComponentResourceManager := new System.ComponentModel.ComponentResourceManager(typeof(MainForm));

self.sbMain := new System.Windows.Forms.StatusStrip();

self.lblStatus := new System.Windows.Forms.ToolStripStatusLabel();

self.lblError := new System.Windows.Forms.ToolStripStatusLabel();

self.gbMsg := new System.Windows.Forms.GroupBox();

self.lblPhoneNo := new System.Windows.Forms.Label();

self.edtSendMsg := new System.Windows.Forms.TextBox();

self.btnSend := new System.Windows.Forms.Button();

self.edtPhoneNo := new System.Windows.Forms.TextBox();

self.edtMsg := new System.Windows.Forms.TextBox();

self.btnLogin := new System.Windows.Forms.Button();

self.edtUserID := new System.Windows.Forms.TextBox();

self.edtPassword := new System.Windows.Forms.TextBox();

self.lblAccount := new System.Windows.Forms.Label();

self.lblPassword := new System.Windows.Forms.Label();

self.gbLogin := new System.Windows.Forms.GroupBox();

self.btnLogoff := new System.Windows.Forms.Button();

self.gbFriendLst := new System.Windows.Forms.GroupBox();

self.lstFriendLst := new System.Windows.Forms.ListBox();

self.btnSendSelf := new System.Windows.Forms.Button();

self.sbMain.SuspendLayout();

self.gbMsg.SuspendLayout();

self.gbLogin.SuspendLayout();

self.gbFriendLst.SuspendLayout();

self.SuspendLayout();

//

// sbMain

//

self.sbMain.Items.AddRange(array of System.Windows.Forms.ToolStripItem([self.lblStatus,

self.lblError]));

self.sbMain.Location := new System.Drawing.Point(0, 466);

self.sbMain.Name := 'sbMain';

self.sbMain.Size := new System.Drawing.Size(358, 22);

self.sbMain.TabIndex := 9;

self.sbMain.Text := 'statusStrip1';

//

// lblStatus

//

self.lblStatus.Name := 'lblStatus';

self.lblStatus.Size := new System.Drawing.Size(41, 17);

self.lblStatus.Text := 'Logoff';

//

// lblError

//

self.lblError.Name := 'lblError';

self.lblError.Size := new System.Drawing.Size(53, 17);

self.lblError.Text := 'No Error';

//

// gbMsg

//

self.gbMsg.Controls.Add(self.lblPhoneNo);

self.gbMsg.Controls.Add(self.edtSendMsg);

self.gbMsg.Controls.Add(self.btnSend);

self.gbMsg.Controls.Add(self.edtPhoneNo);

self.gbMsg.Controls.Add(self.edtMsg);

self.gbMsg.Location := new System.Drawing.Point(12, 198);

self.gbMsg.Name := 'gbMsg';

self.gbMsg.Size := new System.Drawing.Size(337, 231);

self.gbMsg.TabIndex := 8;

self.gbMsg.TabStop := false;

self.gbMsg.Text := 'Message';

//

// lblPhoneNo

//

self.lblPhoneNo.AutoSize := true;

self.lblPhoneNo.Location := new System.Drawing.Point(11, 174);

self.lblPhoneNo.Name := 'lblPhoneNo';

self.lblPhoneNo.Size := new System.Drawing.Size(53, 12);

self.lblPhoneNo.TabIndex := 6;

self.lblPhoneNo.Text := 'Phone No';

//

// edtSendMsg

//

self.edtSendMsg.Location := new System.Drawing.Point(7, 198);

self.edtSendMsg.Name := 'edtSendMsg';

self.edtSendMsg.Size := new System.Drawing.Size(249, 21);

self.edtSendMsg.TabIndex := 5;

//

// btnSend

//

self.btnSend.Location := new System.Drawing.Point(262, 196);

self.btnSend.Name := 'btnSend';

self.btnSend.Size := new System.Drawing.Size(69, 23);

self.btnSend.TabIndex := 4;

self.btnSend.Text := 'Send';

self.btnSend.UseVisualStyleBackColor := true;

self.btnSend.Click += new System.EventHandler(@self.btnSend_Click);

//

// edtPhoneNo

//

self.edtPhoneNo.Location := new System.Drawing.Point(68, 171);

self.edtPhoneNo.Name := 'edtPhoneNo';

self.edtPhoneNo.Size := new System.Drawing.Size(145, 21);

self.edtPhoneNo.TabIndex := 3;

//

// edtMsg

//

self.edtMsg.Location := new System.Drawing.Point(5, 20);

self.edtMsg.Multiline := true;

self.edtMsg.Name := 'edtMsg';

self.edtMsg.ReadOnly := true;

self.edtMsg.ScrollBars := System.Windows.Forms.ScrollBars.Vertical;

self.edtMsg.Size := new System.Drawing.Size(326, 145);

self.edtMsg.TabIndex := 1;

//

// btnLogin

//

self.btnLogin.Location := new System.Drawing.Point(274, 12);

self.btnLogin.Name := 'btnLogin';

self.btnLogin.Size := new System.Drawing.Size(75, 23);

self.btnLogin.TabIndex := 6;

self.btnLogin.Text := 'Login';

self.btnLogin.UseVisualStyleBackColor := true;

self.btnLogin.Click += new System.EventHandler(@self.btnLogin_Click);

//

// edtUserID

//

self.edtUserID.Location := new System.Drawing.Point(69, 17);

self.edtUserID.Name := 'edtUserID';

self.edtUserID.Size := new System.Drawing.Size(180, 21);

self.edtUserID.TabIndex := 3;

//

// edtPassword

//

self.edtPassword.Location := new System.Drawing.Point(69, 44);

self.edtPassword.Name := 'edtPassword';

self.edtPassword.PasswordChar := '*';

self.edtPassword.Size := new System.Drawing.Size(180, 21);

self.edtPassword.TabIndex := 4;

//

// lblAccount

//

self.lblAccount.AutoSize := true;

self.lblAccount.Location := new System.Drawing.Point(6, 20);

self.lblAccount.Name := 'lblAccount';

self.lblAccount.Size := new System.Drawing.Size(47, 12);

self.lblAccount.TabIndex := 1;

self.lblAccount.Text := 'Accoumt';

//

// lblPassword

//

self.lblPassword.AutoSize := true;

self.lblPassword.Location := new System.Drawing.Point(6, 47);

self.lblPassword.Name := 'lblPassword';

self.lblPassword.Size := new System.Drawing.Size(53, 12);

self.lblPassword.TabIndex := 2;

self.lblPassword.Text := 'Password';

//

// gbLogin

//

self.gbLogin.Controls.Add(self.edtPassword);

self.gbLogin.Controls.Add(self.edtUserID);

self.gbLogin.Controls.Add(self.lblAccount);

self.gbLogin.Controls.Add(self.lblPassword);

self.gbLogin.Location := new System.Drawing.Point(11, 6);

self.gbLogin.Name := 'gbLogin';

self.gbLogin.Size := new System.Drawing.Size(255, 80);

self.gbLogin.TabIndex := 7;

self.gbLogin.TabStop := false;

self.gbLogin.Text := 'Login';

//

// btnLogoff

//

self.btnLogoff.Location := new System.Drawing.Point(274, 41);

self.btnLogoff.Name := 'btnLogoff';

self.btnLogoff.Size := new System.Drawing.Size(75, 23);

self.btnLogoff.TabIndex := 10;

self.btnLogoff.Text := 'Logoff';

self.btnLogoff.UseVisualStyleBackColor := true;

self.btnLogoff.Click += new System.EventHandler(@self.btnLogoff_Click);

//

// gbFriendLst

//

self.gbFriendLst.Controls.Add(self.lstFriendLst);

self.gbFriendLst.Location := new System.Drawing.Point(11, 92);

self.gbFriendLst.Name := 'gbFriendLst';

self.gbFriendLst.Size := new System.Drawing.Size(338, 100);

self.gbFriendLst.TabIndex := 11;

self.gbFriendLst.TabStop := false;

self.gbFriendLst.Text := 'Friend List';

//

// lstFriendLst

//

self.lstFriendLst.FormattingEnabled := true;

self.lstFriendLst.ItemHeight := 12;

self.lstFriendLst.Location := new System.Drawing.Point(8, 18);

self.lstFriendLst.Name := 'lstFriendLst';

self.lstFriendLst.Size := new System.Drawing.Size(324, 76);

self.lstFriendLst.TabIndex := 0;

//

// btnSendSelf

//

self.btnSendSelf.Location := new System.Drawing.Point(243, 435);

self.btnSendSelf.Name := 'btnSendSelf';

self.btnSendSelf.Size := new System.Drawing.Size(106, 23);

self.btnSendSelf.TabIndex := 12;

self.btnSendSelf.Text := 'Send To Self';

self.btnSendSelf.UseVisualStyleBackColor := true;

self.btnSendSelf.Click += new System.EventHandler(@self.btnSendSelf_Click);

//

// MainForm

//

self.ClientSize := new System.Drawing.Size(358, 488);

self.Controls.Add(self.btnSendSelf);

self.Controls.Add(self.gbFriendLst);

self.Controls.Add(self.btnLogoff);

self.Controls.Add(self.sbMain);

self.Controls.Add(self.gbMsg);

self.Controls.Add(self.btnLogin);

self.Controls.Add(self.gbLogin);

self.Icon := (resources.GetObject('$this.Icon') as System.Drawing.Icon);

self.Name := 'MainForm';

self.Text := 'Fetion';

self.Load += new System.EventHandler(@self.MainForm_Load);

self.sbMain.ResumeLayout(false);

self.sbMain.PerformLayout();

self.gbMsg.ResumeLayout(false);

self.gbMsg.PerformLayout();

self.gbLogin.ResumeLayout(false);

self.gbLogin.PerformLayout();

self.gbFriendLst.ResumeLayout(false);

self.ResumeLayout(false);

self.PerformLayout();

end;

{$ENDREGION}

method MainForm.MainForm_Load(sender: System.Object; e: System.EventArgs);

begin

sdk := new FetionSDK;

bLogon := false;

sdk.SDK_UserSatusChange += new FetionSDK.SDK_UserSatusChangedEventHandler(sdk_SDK_UserSatusChange);

sdk.SDK_ReceiveMessage += new FetionSDK.SDK_ReceiveMessageEventHandler(sdk_SDK_ReceiveMessage);

sdk.SDK_Error += new FetionSDK.SDK_ErrorEventHandler(sdk_SDK_Error);

end;

procedure MainForm.sdk_SDK_UserSatusChange(sender: Object; e:UserSatusChangedEventArgs);

var

currStat: string;

i: Integer;

lst : List<Contact>;

begin

currStat := e.NewStatus.ToString();

lblStatus.Text := currStat;

case e.NewStatus of

Imps.Client.UserAccountStatus.Logon:

begin

bLogon := true;

lstFriendLst.Items.Clear();

lst := sdk.ContactControl.getAllContactList();

for i := 0 to lst.Count - 1 do

begin

lstFriendLst.Items.Add(

string.Format("{0} [Fetion: {1} Mobile: {2}]",

lst[i].DisplayName, lst[i].Uri.Id,

IfThen(lst[i].PersonalInfo.MobileNo = string.Empty, "Not Published", lst[i].PersonalInfo.MobileNo)));

end;

end;

else

begin

bLogon := false;

lstFriendLst.Items.Clear();

end;

{

Imps.Client.UserAccountStatus.Disconnected: ;

Imps.Client.UserAccountStatus.Initialized: ;

Imps.Client.UserAccountStatus.Loginning: ;

Imps.Client.UserAccountStatus.Logoff: ;

Imps.Client.UserAccountStatus.Logouting: ;

Imps.Client.UserAccountStatus.None: ;

Imps.Client.UserAccountStatus.OfflineLogon: ;

Imps.Client.UserAccountStatus.StandBy: ;

Imps.Client.UserAccountStatus.WaitReconnect: ;

}

end;

end;

method MainForm.btnLogin_Click(sender: System.Object; e: System.EventArgs);

begin

if not bLogon then

begin

sdk.AccountManager.FillUserIdAndPassword(edtUserID.Text,edtPassword.Text,false);

sdk.AccountManager.LoginOrLogout();

end;

end;

procedure MainForm.sdk_SDK_Error(sender: Object; e: SDK_ErrorEventArgs);

begin

lblError.Text := e.Message.Message;

end;

method MainForm.btnLogoff_Click(sender: System.Object; e: System.EventArgs);

begin

if bLogon then

sdk.AccountManager.LoginOrLogout();

end;

function MainForm.IfThen(ABool: Boolean; AStr1, AStr2: String): String;

begin

if ABool then

result := AStr1

else

result := AStr2;

end;

method MainForm.btnSend_Click(sender: System.Object; e: System.EventArgs);

begin

sdk.ContactControl.SendIM.SendIM(edtPhoneNo.Text, edtSendMsg.Text);

edtMsg.Text := edtMsg.Text + 'Self: ' + edtSendMsg.Text + '\r\n';

end;

procedure MainForm.sdk_SDK_ReceiveMessage(sender: Object; e:SDK_ReceiveMessageEventArgs);

begin

edtMsg.Text := edtMsg.Text + e.Contact.DisplayName + ': '+e.Message;

end;

method MainForm.btnSendSelf_Click(sender: System.Object; e: System.EventArgs);

begin

sdk.ContactControl.SendSMS.SendSMS(sdk.ContactControl.getMyself.Uri.Id,edtSendMsg.Text);

end;

end.

=====================================================================================
注:
上面的示例采用的是 Delphi 代码,在附件中有 用 C# 编写的 .NET 示例代码 。
返回文章首页

附件 (2)

  • FetionSDK.rar 1057k - 创建时间 2009-3-8 上午6:39,创建人 石东亮 (版本 3 / 早期版本)
  • MyFetion.rar 988k - 创建时间 2009-3-8 上午6:37,创建人 石东亮 (版本 3 / 早期版本)

转载于:https://www.cnblogs.com/xiexiaokui/archive/2009/04/05/1430020.html

飞信Fetion 开发资料及下载相关推荐

  1. 最新MTK芯片型号汇总,MTK开发资料大全下载

    前面总结的MTK芯片资料有点混乱,不好查看,现在重新整理一份全面的MTK芯片,MTK开发设计资料,方便大家学习,下载. MTK芯片分类: MTK芯片型号大全:http://bbs.16rd.com/c ...

  2. GD32开发资料汇总下载软件硬件工具

    GD32的芯片替代STM32目前已是大势所趋,进口料已经买不到货,周期也拉到了半年以上,价格也是很夸张. 如果你打算换芯片,又着急找资料,这里汇总了所有系列的GD32资料: 直接上图,总有一款适合你. ...

  3. MT6739芯片处理器,MT6739套片开发资料汇集下载

    MT6739处理器: MT6739处理器具有集成的蓝牙.FM.WLAN和GPS模块,是一个高度集成的基带平台,包括调制解调器和应用处理子系统,以实现LTE智能手机应用.该芯片集成了高达1.28 GHz ...

  4. 【Visual C++】游戏开发笔记三十一 回归季:游戏开发资料整理打包下载专栏行文思路整理

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/8147229 作者:毛星云    邮箱: h ...

  5. 【Visual C++】游戏开发笔记三十一 回归季 游戏开发资料整理打包下载 专栏行文思路整理

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. 超全 泛微 E9 Ecology 9开发资料大全 开源资源下载 泛微E9二次开发 泛微开发实战经验 泛微开发实战例子 泛微二次开发项目例子 泛微二次开发Demo 泛微二次开发完整例子 泛微二次开发入门

            由于工作需要,E9在泛微一推出来,以前所在的企业就第一时间上线了,经过四年多的运行,功能强大再加上在上面开发非常多的业务,一般的企业员工只需要打开泛微就可以处理完平时信息化的业务.后来 ...

  7. 瑞芯微的linux内核文件在哪里下载,瑞芯微最新开发资料下载--rk3399 ubuntu16.04开发说明...

    rk3399 ubuntu16.04 开发说明 1 下载和解压 ubuntu rk3399-excavator ubuntu 根文件系统是基于 ubuntu-base-16.04 来创建的.ubunt ...

  8. 飞信Fetion历史数据库研究(History.dat)——嵌入式数据库SQLite介绍(转)

    最近使用飞信,但发现不能将历史消息像QQ消息那样导出,感觉很不爽. 当在飞信中设置(操作–选项–个人设置–消息历史)了保存历史消息之后,飞信的历史消息数据保存的路径如下: 2008的消息存储路径: v ...

  9. Xamarin Anroid开发教程之下载安装Xamarin

    Xamarin Anroid开发教程之下载安装Xamarin Xamarin在过去安装时都会检查系统中是否安装了前面所提供的内容.而后来,Xamarin安装时只提供安装步骤,其它内容都需要读者自己下载 ...

最新文章

  1. PyTorch 笔记(01)— Ubuntu 使用 pip 清华源安装 PyTorch
  2. Tensorflow 可视化 TensorBoard 尝试~
  3. python跳出双层for循环的解决方法
  4. uploadify.php 漏洞,PhotoStore “uploadify.php”任意文件上传漏洞
  5. 3dsmax子菜单无法选择_3DsMax—用平面图片制作3D模型
  6. 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别
  7. /etc/bashrc和/etc/profile
  8. 各种编译环境中如何为C++添加命令行参数(Command-line parameter)
  9. 河北省科技创新平台用例图
  10. Unity采用Forge Networking Remastered数据的远程传输 Basic RPC Example
  11. C语言中图形题,c语言图形输出习题.doc
  12. DIY实用工具——看看大神手下的示波器
  13. Hex转Bin小工具
  14. 跑分软件测试原理,只会比高低?教你三分钟看懂安兔兔跑分
  15. ANC降噪蓝牙耳机软件工程的数学原理
  16. 1.21 同级比较 倒装句 否定Neither
  17. linux 解决内存不足问题(设置虚拟内存)
  18. 计算机 桌面显示桌面图标不见了,显示桌面图标不见了怎么办,小编教你电脑显示桌面图标不见了怎么解决...
  19. openid与商户appid不匹配
  20. HDU4622 Reincarnation

热门文章

  1. 因《乔布斯传》而开发的XC3566
  2. STM32F405驱动WS2812E灯珠灯带代码
  3. 【软件测试】资深测试是如何火速入坑的?测试任务艰巨无从下手?
  4. 斐波那契查找算法解析
  5. c语言实现磁盘存储空间的分配和回收,操作系统磁盘管理 借鉴资料
  6. 对单链表实现就地逆置
  7. WPF DEV dxc:ChartControl 柱状图
  8. 破解工具ida解决乱码问题
  9. RN Weex 的比较
  10. [CC-MCO16306]Fluffy and Alternating Subsequence