C# 调用腾讯即时通信 IM的示例

 更新时间:2020年11月21日 11:32:06   作者:正在缓冲  
这篇文章主要介绍了C# 调用腾讯即时通信 IM的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下

IM SDK API 概述 https://cloud.tencent.com/document/product/269/33543

/// <summary>
    /// IM SDK 初始化。
    /// </summary>
    /// <param name="sdk_app_id"></param>
    /// <param name="json_sdk_config"></param>
    /// <returns></returns>
    [DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    public extern static int TIMInit(long sdk_app_id, string json_sdk_config);
/// <summary>
    /// 登录
    /// </summary>
    /// <param name="user_id">用户id</param>
    /// <param name="user_sig">签名</param>
    /// <param name="cb"></param>
    /// <returns></returns>
    [DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl)]
    private extern static int TIMLogin(string user_id, string user_sig, TIMCommCallback cb);
/// <summary>
    /// 接收新消息回调
    /// </summary>
    /// <param name="cb"></param>
    [DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    private extern static void TIMAddRecvNewMsgCallback(delegateTIMRecvNewMsgCallback cb);
public void ImInit()
    {
      int sdk_app_id = 1400000000;
      var data = new { sdk_config_log_file_path = AppDomain.CurrentDomain.BaseDirectory, sdk_config_config_file_path = AppDomain.CurrentDomain.BaseDirectory };
      TIMInit(sdk_app_id, JsonConvert.SerializeObject(data));
      TIMAddRecvNewMsgCallback(TIMRecvNewMsgCallback);
      var tLSSig = new TLSSigAPIv2(sdk_app_id, "163250645178b565ffc0b22618d14a88d8a91d86f0e76813313197a5xxxxxxx");
      TIMLogin("用户", tLSSig.GenSig("用户"), CommCallback);

    }
    private delegate int TIMCommCallback(int code, string desc, string json_params);
    
    private int CommCallback(int code, string desc, string json_params)
    {
      return code;
    }
    public delegate void delegateTIMRecvNewMsgCallback([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))] string json_msg_array, IntPtr user_data);;
    private void TIMRecvNewMsgCallback(string json_msg_array, IntPtr user_data) {
      var b = Encoding.Default.GetBytes(json_msg_array);
      richTextBox1.AppendText(Encoding.UTF8.GetString(b));
    }
    private void Form1_Load(object sender, EventArgs e)
    {
     ImInit();
    }
public class Utf8Marshaler : ICustomMarshaler
    {
        public void CleanUpManagedData(object managedObj)
        {
        }
 
        public void CleanUpNativeData(IntPtr pNativeData)
        {
            Marshal.FreeHGlobal(pNativeData);
        }
 
        public int GetNativeDataSize()
        {
            return -1;
        }
 
        public IntPtr MarshalManagedToNative(object managedObj)
        {
            if (object.ReferenceEquals(managedObj, null))
                return IntPtr.Zero;
            if (!(managedObj is string))
                throw new InvalidOperationException();
 
            byte[] utf8Bytes = Encoding.UTF8.GetBytes((string)managedObj);
            IntPtr ptr = Marshal.AllocHGlobal(utf8Bytes.Length + 1);
            Marshal.Copy(utf8Bytes, 0, ptr, utf8Bytes.Length);
            Marshal.WriteByte(ptr, utf8Bytes.Length, 0);
            return ptr;
        }
 
        public object MarshalNativeToManaged(IntPtr pNativeData)
        {
            if (pNativeData == IntPtr.Zero)
                return null;
 
            List<byte> bytes = new List<byte>();
            for (int offset = 0; ; offset++)
            {
                byte b = Marshal.ReadByte(pNativeData, offset);
                if (b == 0)
                    break;
                else
                    bytes.Add(b);
            }
            return Encoding.UTF8.GetString(bytes.ToArray(), 0, bytes.Count);
        }
 
        private static readonly Utf8Marshaler Instance = new Utf8Marshaler();
        public static ICustomMarshaler GetInstance(string cookie)
        {
            return Instance;
        }
    }

以上就是C# 调用腾讯即时通信 IM的示例的详细内容,更多关于c# 调用腾讯 im的资料请关注脚本之家其它相关文章!

相关文章

  • 英语单词state与status的区别

    英语单词state与status的区别

    state倾向于condition,是一种延续性的状态。status常用于描述一个过程中的某阶段(phase),类似于C语言中枚举型变量某一个固定的值,这个值属于一个已知的集合。这篇文章主要介绍了英语单词state与status的区别,需要的朋友可以参考下
    2016-11-11
  • c#在控制台输出彩色文字的方法

    c#在控制台输出彩色文字的方法

    c#在控制台输出彩色文字的方法,需要的朋友可以参考一下
    2013-03-03
  • 分享WCF聊天程序--WCFChat实现代码

    分享WCF聊天程序--WCFChat实现代码

    无意中在一个国外的站点下到了一个利用WCF实现聊天的程序,作者是:Nikola Paljetak。研究了一下,自己做了测试和部分修改,感觉还不错,分享给大家
    2015-11-11
  • 桌面浮动窗口(类似恶意广告)的实现详解

    桌面浮动窗口(类似恶意广告)的实现详解

    本篇文章是对桌面浮动窗口的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • C# 元组和值元组的具体使用

    C# 元组和值元组的具体使用

    这篇文章主要介绍了C# 元组和值元组的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 使用C#的aforge类库识别验证码实例

    使用C#的aforge类库识别验证码实例

    这篇文章主要介绍了使用C#的aforge类库识别验证码实例,aforge类库是一个非常强大的类库,包括计算机视觉与人工智能、图像处理、神经网络、遗传算法、机器学习、机器人等领域,需要的朋友可以参考下
    2014-08-08
  • C#编程简单实现生成PDF文档的方法示例

    C#编程简单实现生成PDF文档的方法示例

    这篇文章主要介绍了C#编程简单实现生成PDF文档的方法,结合实例形式分析了C#生成PDF文档的具体步骤与相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • 实例讲解C# 泛型(Generic)

    实例讲解C# 泛型(Generic)

    这篇文章主要介绍了C# 泛型(Generic)的的相关资料,文中示例代码非常详细,帮助大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#获取Excel第一列的实例方法

    C#获取Excel第一列的实例方法

    在本篇文章里小编给各位分享了关于C# 怎么获取Excel第一列的实例方法和代码,需要的朋友们可以学习下。
    2019-08-08
  • C#操作txt文件,进行清空添加操作的小例子

    C#操作txt文件,进行清空添加操作的小例子

    这篇文章介绍了C#操作txt文件,进行清空添加操作的小例子,有需要的朋友可以参考一下
    2013-09-09

最新评论