最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 調(diào)用騰訊即時(shí)通信 IM的示例

 更新時(shí)間:2020年11月21日 11:32:06   作者:正在緩沖  
這篇文章主要介紹了C# 調(diào)用騰訊即時(shí)通信 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>
    /// 接收新消息回調(diào)
    /// </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# 調(diào)用騰訊即時(shí)通信 IM的示例的詳細(xì)內(nèi)容,更多關(guān)于c# 調(diào)用騰訊 im的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#通過KD樹進(jìn)行距離最近點(diǎn)的查找

    C#通過KD樹進(jìn)行距離最近點(diǎn)的查找

    這篇文章主要為大家詳細(xì)介紹了C#通過KD樹進(jìn)行距離最近點(diǎn)的查找,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • C#實(shí)現(xiàn)生成mac地址與IP地址注冊(cè)碼的兩種方法

    C#實(shí)現(xiàn)生成mac地址與IP地址注冊(cè)碼的兩種方法

    這篇文章主要介紹了C#實(shí)現(xiàn)生成mac地址與IP地址注冊(cè)碼的兩種方法,非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • Unity Shader片段著色器使用基礎(chǔ)詳解

    Unity Shader片段著色器使用基礎(chǔ)詳解

    頂點(diǎn)-片段著色器是Unity Shader中最基礎(chǔ)的著色器類型,用于控制3D模型的渲染效果。通過頂點(diǎn)著色器計(jì)算模型的頂點(diǎn)位置和法線方向,再通過片段著色器計(jì)算模型表面的顏色、光照、陰影等效果
    2023-05-05
  • C#實(shí)現(xiàn)將類的內(nèi)容寫成JSON格式字符串的方法

    C#實(shí)現(xiàn)將類的內(nèi)容寫成JSON格式字符串的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將類的內(nèi)容寫成JSON格式字符串的方法,涉及C#針對(duì)json格式數(shù)據(jù)轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 詳解TreeView綁定數(shù)據(jù)庫(kù)

    詳解TreeView綁定數(shù)據(jù)庫(kù)

    這篇文章主要演示了TreeView如何與數(shù)據(jù)庫(kù)進(jìn)行綁定
    2015-07-07
  • 探討:關(guān)閉瀏覽器后,php腳本會(huì)不會(huì)繼續(xù)運(yùn)行

    探討:關(guān)閉瀏覽器后,php腳本會(huì)不會(huì)繼續(xù)運(yùn)行

    本篇文章是對(duì)關(guān)閉瀏覽器后,php腳本會(huì)不會(huì)繼續(xù)運(yùn)行進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • choosesubject c# switch

    choosesubject c# switch

    c# switch 實(shí)例代碼。
    2009-07-07
  • C#中系統(tǒng)時(shí)間和UNIX時(shí)間戳互相轉(zhuǎn)換

    C#中系統(tǒng)時(shí)間和UNIX時(shí)間戳互相轉(zhuǎn)換

    本文主要介紹C#中系統(tǒng)時(shí)間和UNIX時(shí)間戳相互轉(zhuǎn)換的方法,大家可以直接拿去用,希望有用。
    2016-05-05
  • 最新評(píng)論

    略阳县| 英德市| 靖远县| 元江| 嵊州市| 隆德县| 铜陵市| 多伦县| 泰宁县| 扶风县| 许昌县| 怀化市| 灵台县| 衡阳县| 沅陵县| 晋城| 台前县| 隆昌县| 罗城| 英吉沙县| 镇宁| 原阳县| 泸溪县| 潮州市| 轮台县| 金川县| 蓬安县| 平阳县| 临夏市| 奉贤区| 遵义县| 红原县| 云安县| 桓台县| 富裕县| 孟村| 彰武县| 四子王旗| 江川县| 磴口县| 瑞丽市|