服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 调用腾讯即时通信 IM的示例

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

2022-10-17 11:59正在缓冲 C#

这篇文章主要介绍了C# 调用腾讯即时通信 IM的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下

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

?
1
2
3
4
5
6
7
8
/// <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);
?
1
2
3
4
5
6
7
8
9
/// <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);
?
1
2
3
4
5
6
/// <summary>
    /// 接收新消息回调
    /// </summary>
    /// <param name="cb"></param>
    [DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    private extern static void TIMAddRecvNewMsgCallback(delegateTIMRecvNewMsgCallback cb);
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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));
    }
?
1
2
3
4
private void Form1_Load(object sender, EventArgs e)
{
 ImInit();
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/zhangliang2008/p/11847858.html

延伸 · 阅读

精彩推荐
  • C#C# Winform选项卡集成窗体详解

    C# Winform选项卡集成窗体详解

    这篇文章主要为大家详细介绍了C# Winform选项卡集成窗体详解的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    绛河6232022-01-24
  • C#C#实现在网页中根据url截图并输出到网页的方法

    C#实现在网页中根据url截图并输出到网页的方法

    这篇文章主要介绍了C#实现在网页中根据url截图并输出到网页的方法,涉及C#网页浏览器及图片操作的相关技巧,需要的朋友可以参考下...

    nd6482021-11-08
  • C#C#中的DateTime是值类型还是引用类型

    C#中的DateTime是值类型还是引用类型

    近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容,大家有需要的朋友可以参考下...

    zhixin90018332021-12-31
  • C#C#学习笔记——基本语法

    C#学习笔记——基本语法

    本文给大家详细介绍了C#的基本语法知识以及一些基础知识的汇总,非常的简单基础,有需要的小伙伴可以参考下...

    C#教程网4092021-12-22
  • C#C#将Unicode编码转换为汉字字符串的简单方法

    C#将Unicode编码转换为汉字字符串的简单方法

    下面小编就为大家带来一篇C#将Unicode编码转换为汉字字符串的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看...

    C#教程网9232021-04-28
  • C#Windows系统中C#读写ini配置文件的程序代码示例分享

    Windows系统中C#读写ini配置文件的程序代码示例分享

    这篇文章主要介绍了C#读写ini配置文件的程序代码示例分享,在Windows下可以利用Win32的API函数轻松实现,需要的朋友可以参考下...

    hzy377412012021-11-18
  • C#浅谈C# AOP的简单实现

    浅谈C# AOP的简单实现

    这篇文章主要介绍了浅谈C# AOP的简单实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    懒得安分7752022-02-25
  • C#c# DataDirectory的用法

    c# DataDirectory的用法

    这篇文章主要介绍了c# DataDirectory的用法,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...

    cnxy7572022-10-07