前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#调用即时通信IMSDK

C#调用即时通信IMSDK

原创
作者头像
tyjwzhu
修改2022-08-08 12:18:46
3.1K7
修改2022-08-08 12:18:46
举报
文章被收录于专栏:TRTCTRTC

前言

建议版本,5.9+

指引

1.新建C#一个控制台项目用于测试。

2.下载SDK导入

3.由于这个是控制台项目,需要我们手动维持一个消息循环

(否则您是无法收到IM大部分回调,这个是大部分人经常遇到的问题)

导入User32.dll的方法:

代码语言:javascript
复制
public struct tagMSG
{
    public int hwnd;
    public uint message;
    public int wParam;
    public long lParam;
    public uint time;
    public int pt;
}
[DllImport("user32", EntryPoint = "GetMessage")]
public static extern int GetMessage(
out tagMSG lpMsg,
IntPtr hwnd,
int wMsgFilterMin,
int wMsgFilterMax
);

[DllImport("user32", EntryPoint = "DispatchMessage")]
public static extern int DispatchMessage(
ref tagMSG lpMsg
);

[DllImport("user32", EntryPoint = "TranslateMessage")]
public static extern int TranslateMessage(
ref tagMSG lpMsg
);

[DllImport(@"User32")]
public extern static void PostQuitMessage(int exitcode);

在主函数中这样调用:

代码语言:javascript
复制
static void Main(string[] args)
{
    //TIMInit 
    //TODO 其他操作
    // MessageLoop();// 这里消息循环
    tagMSG Msgs;
    while (GetMessage(out Msgs, IntPtr.Zero, 0, 0) > 0)
    {
        TranslateMessage(ref Msgs);
        DispatchMessage(ref Msgs);
    }
    // 上面消息循环
    //TIMUninit
}

如果要退出消息循环,在Main所在的线程调用:

代码语言:javascript
复制
PostQuitMessage(0);

4.封装IM的方法。

这里需要注意一些,不建议用string接受const char*,为什么呢,由于如果直接用string,那么C#会自动将字符串以CharSet 的字符编码转换到您当前应用程序的编码。这个是不受您控制的,而且一旦转换了,就无法获得原来的data数据。

比如说 :

代码语言:javascript
复制
[DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public extern static int TIMInit(long sdk_app_id, string json_sdk_config);

最好用IntPtr来接受const char*:

代码语言:javascript
复制
[DllImport(@"imsdk.dll")]
public extern static int TIMInit(UInt64 sdk_app_id, IntPtr json_sdk_config);

为了方便调用,我们再封装一层:

代码语言:javascript
复制
[DllImport(@"imsdk.dll")]
public extern static int TIMInit(UInt64 sdk_app_id, IntPtr json_sdk_config);

public static int TIMInit(UInt64 sdk_app_id, string json_sdk_config)
{
    IntPtr ptrConfig = StrToUtf8HGlobalPtr(json_sdk_config);
    int iRet = TIMInit(sdk_app_id, ptrConfig);
    Marshal.FreeHGlobal(ptrConfig);
    return iRet;
}

同样,回调也不要用string接受,建议直接用IntPtr:

代码语言:javascript
复制
//定义托管方法
public delegate void TIMCommCallback(Int32 code, IntPtr desc, IntPtr json_param, IntPtr ptr);
//...
//其他代码
//...
public static void MyTIMCommCallback(Int32 code, IntPtr desc, IntPtr json_params, IntPtr ptr)
{
    if (IntPtr.Zero.Equals(json_params)) return;
    string strJsonParams = Marshal.PtrToStringUTF8(json_params);
    Console.WriteLine("TIMCall:: {0} \n", strJsonParams);
    //由于回调是通过主线程处理的,调用PostQuitMessage发送退出程序
    //PostQuitMessage(0);
}

最终封装SDK代码

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;


namespace Tencent
{
    class IMNative
    {
        //tools
        public static IntPtr StrToUtf8HGlobalPtr(string str)
        {
            if(str == null)
            {
                return IntPtr.Zero;
            }
            byte[] datas = System.Text.Encoding.UTF8.GetBytes(str);
            IntPtr dataPtr = Marshal.AllocHGlobal(datas.Length + 1);
            Marshal.Copy(datas, 0, dataPtr, datas.Length);
            Marshal.WriteByte(dataPtr, datas.Length, 0);
            return dataPtr;
        }
        public static string Utf8HGlobalPtrToStr(IntPtr data)
        {
            if(IntPtr.Zero.Equals(data))
            {
                return null;
            }
            return Marshal.PtrToStringUTF8(data);
        }
        //callbacks
        //[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)] 告知不要释放代理函数内存如IntPtr占用(改内存应该是C/C++DLL给到的)
        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMRecvNewMsgCallback(IntPtr json_msg_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMMsgReadedReceiptCallback(IntPtr json_msg_readed_receipt_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMMsgRevokeCallback(IntPtr json_msg_locator_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMMsgElemUploadProgressCallback(IntPtr json_msg, UInt32 index, UInt32 cur_size, UInt32 total_size, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMGroupTipsEventCallback(IntPtr json_group_tip_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMConvEventCallback(Int32 conv_event, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMNetworkStatusListenerCallback(Int32 status, Int32 code, IntPtr desc, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMKickedOfflineCallback(IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMUserSigExpiredCallback(IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMOnAddFriendCallback(IntPtr json_identifier_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMOnDeleteFriendCallback(IntPtr json_identifier_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMUpdateFriendProfileCallback(IntPtr json_friend_profile_update_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMFriendAddRequestCallback(IntPtr json_friend_add_request_pendency_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMLogCallback(Int32 level, IntPtr log, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMMsgUpdateCallback(Int32 json_msg_array, IntPtr user_data);

        [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
        public delegate void TIMCommCallback(Int32 code, IntPtr desc, IntPtr json_param, IntPtr ptr);

        //functions - set callbacks
        /// <summary>
        /// 增加接收新消息回调。
        /// </summary>
        /// <param name="cb">新消息回调函数,请参考 TIMRecvNewMsgCallback</param>
        /// <param name="user_data">用户自定义数据,IM SDK 只负责传回给回调函数 cb,不做任何处理</param>
        [DllImport(@"imsdk.dll")]
        public extern static void TIMAddRecvNewMsgCallback(TIMRecvNewMsgCallback cb, IntPtr user_data);
        /// <summary>
        /// 删除接收新消息回调。
        /// </summary>
        /// <param name="cb">新消息回调函数,请参考 TIMRecvNewMsgCallback</param>
        [DllImport(@"imsdk.dll")]
        public extern static void TIMRemoveRecvNewMsgCallback(TIMRecvNewMsgCallback cb);
        /// <summary>
        /// 设置消息已读回执回调。
        /// </summary>
        /// <param name="cb">消息已读回执回调,请参考 TIMMsgReadedReceiptCallback</param>
        /// <param name="user_data">用户自定义数据,IM SDK 只负责传回给回调函数 cb,不做任何处理</param>
        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetMsgReadedReceiptCallback(TIMMsgReadedReceiptCallback cb, IntPtr user_data);
        /// <summary>
        /// 设置接收的消息被撤回回调。
        /// </summary>
        /// <param name="cb">消息撤回通知回调,请参考 TIMMsgRevokeCallback</param>
        /// <param name="user_data">用户自定义数据,IM SDK 只负责传回给回调函数 cb,不做任何处理</param>
        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetMsgRevokeCallback(TIMMsgRevokeCallback cb, IntPtr user_data);
        /// <summary>
        /// 设置消息内元素相关文件上传进度回调。
        /// </summary>
        /// <param name="cb">文件上传进度回调,请参考 TIMMsgElemUploadProgressCallback</param>
        /// <param name="user_data">用户自定义数据,IM SDK 只负责传回给回调函数 cb,不做任何处理</param>
        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetMsgElemUploadProgressCallback(TIMMsgElemUploadProgressCallback cb, IntPtr user_data);
        /// <summary>
        /// 群属性变更回调。废弃(无任何引用)
        /// </summary>
        /// <param name="group_id">群 ID</param>
        /// <param name="json_group_attibute_array">群提示列表</param>
        /// <param name="user_data">用户自定义数据,IM SDK 只负责传回给回调函数 cb,不做任何处理</param>
        public delegate void TIMGroupAttributeChangedCallback(IntPtr group_id, IntPtr json_group_attibute_array, IntPtr user_data);

        /// <summary>
        /// 设置群组系统消息回调
        /// </summary>
        /// <param name="cb">群消息回调,请参考 TIMGroupTipsEventCallback</param>
        /// <param name="user_data">用户自定义数据,IM SDK 只负责传回给回调函数 cb,不做任何处理</param>
        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetGroupTipsEventCallback(TIMGroupTipsEventCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetConvEventCallback(TIMConvEventCallback cb, IntPtr user_data);

        /// <summary>
        /// 会话未读消息总数变化。废弃(无任何引用)
        /// </summary>
        /// <param name="total_unread_count">会话未读消息总数变化。</param>
        /// <param name="user_data">会话未读消息总数变化。</param>
        public delegate void TIMConvTotalUnreadMessageCountChangedCallback(Int32 total_unread_count, IntPtr user_data);

        /// <summary>
        /// 设置网络连接状态监听回调。
        /// 当调用接口 TIMInit 时,IM SDK 会去连接云后台。此接口设置的回调用于监听网络连接的状态。<br/>
        /// 网络连接状态包含四个:正在连接、连接失败、连接成功、已连接。这里的网络事件不表示用户本地网络状态,仅指明 IM SDK 是否与即时通信 IM 云 Server 连接状态。<br/>
        /// 可选设置,如果要用户感知是否已经连接服务器,需要设置此回调,用于通知调用者跟通讯后台链接的连接和断开事件,另外,如果断开网络,等网络恢复后会自动重连,自动拉取消息通知用户,用户无需关心网络状态,仅作通知之用。<br/>
        /// 只要用户处于登录状态,IM SDK 内部会进行断网重连,用户无需关心。<br/>
        /// </summary>
        /// <param name="cb">连接事件回调,请参考 TIMNetworkStatusListenerCallback</param>
        /// <param name="user_data">用户自定义数据,IM SDK 只负责传回给回调函数 cb,不做任何处理</param>
        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetNetworkStatusListenerCallback(TIMNetworkStatusListenerCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetKickedOfflineCallback(TIMKickedOfflineCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetUserSigExpiredCallback(TIMUserSigExpiredCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetOnAddFriendCallback(TIMOnAddFriendCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetOnDeleteFriendCallback(TIMOnDeleteFriendCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetUpdateFriendProfileCallback(TIMUpdateFriendProfileCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetFriendAddRequestCallback(TIMFriendAddRequestCallback cb, IntPtr user_data);

        //[DllImport(@"imsdk.dll")]
        //public extern static void TIMFriendApplicationListDeletedCallback(IntPtr json_identifier_array, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetLogCallback(TIMLogCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static void TIMSetMsgUpdateCallback(TIMMsgUpdateCallback cb, IntPtr user_data);

        //functions 
        [DllImport(@"imsdk.dll")]
        public extern static int TIMLogin(IntPtr user_id, IntPtr user_sig, IntPtr cb, IntPtr user_data);

        public static int TIMLogin(string user_id, string user_sig, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(user_id);
            IntPtr ptrUserSig = StrToUtf8HGlobalPtr(user_sig);
            IntPtr cbFuncPtr = Marshal.GetFunctionPointerForDelegate<IMNative.TIMCommCallback>(cb);
            int iRet = TIMLogin(ptrParam, ptrUserSig, cbFuncPtr, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrUserSig);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMLogout(TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGetLoginStatus();

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGetLoginUserID(IntPtr user_id_buffer);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvCreate(IntPtr conv_id, Int32 conv_type, TIMCommCallback cb, IntPtr user_data);

        public static int TIMConvCreate(string conv_id, Int32 conv_type, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            int iRet = TIMConvCreate(ptrParam, conv_type, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvDelete(IntPtr conv_id, Int32 conv_type, TIMCommCallback cb, IntPtr user_data);

        public static int TIMConvDelete(string conv_id,Int32 conv_type, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            int iRet = TIMConvDelete(ptrParam, conv_type, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvGetConvList(TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvGetConvInfo(IntPtr json_get_conv_list_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMConvGetConvInfo(string conv_id, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            int iRet = TIMConvGetConvInfo(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvSetDraft(IntPtr conv_id, Int32 conv_type, IntPtr json_draft_param);

        public static int TIMConvSetDraft(string conv_id, Int32 conv_type,string json_get_conv_list_param)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrDraftParam = StrToUtf8HGlobalPtr(json_get_conv_list_param);
            int iRet = TIMConvSetDraft(ptrParam, conv_type, ptrDraftParam);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrDraftParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvCancelDraft(IntPtr conv_id, Int32 conv_type);

        public static int TIMConvCancelDraft(string conv_id, Int32 conv_type)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            int iRet = TIMConvCancelDraft(ptrParam, conv_type);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvPinConversation(IntPtr conv_id, Int32 conv_type, bool is_pinned, TIMCommCallback cb, IntPtr user_data);

        public static int TIMConvPinConversation(string conv_id, Int32 conv_type, bool is_pinned, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            int iRet = TIMConvPinConversation(ptrParam, conv_type, is_pinned, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMConvGetTotalUnreadMessageCount(TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgSendMessage(IntPtr conv_id, Int32 conv_type, IntPtr json_msg_param, IntPtr message_id_buffer, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgSendMessage(string conv_id, Int32 conv_type, string json_msg_param, IntPtr message_id_buffer, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgParam = StrToUtf8HGlobalPtr(json_msg_param);
            int iRet = TIMMsgSendMessage(ptrParam, conv_type, ptrMsgParam, message_id_buffer, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgSendNewMsg(IntPtr conv_id, int conv_type, IntPtr json_msg_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgSendNewMsg(string conv_id, Int32 conv_type, string json_msg_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgParam = StrToUtf8HGlobalPtr(json_msg_param);
            int iRet = TIMMsgSendNewMsg(ptrParam, conv_type, ptrMsgParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgCancelSend(IntPtr conv_id, Int32 conv_type, IntPtr message_id, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgCancelSend(string conv_id, Int32 conv_type, string message_id, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgId = StrToUtf8HGlobalPtr(message_id);
            int iRet = TIMMsgCancelSend(ptrParam, conv_type, ptrMsgId, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgId);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgFindMessages(IntPtr json_message_id_array, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgFindMessages(string json_message_id_array,TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_message_id_array);
            int iRet = TIMMsgFindMessages(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgReportReaded(IntPtr conv_id, Int32 conv_type, IntPtr json_msg_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgReportReaded(string conv_id, Int32 conv_type, string json_msg_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_msg_param);
            int iRet = TIMMsgReportReaded(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgMarkAllMessageAsRead(TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgRevoke(IntPtr conv_id, Int32 conv_type, IntPtr json_msg_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgRevoke(string conv_id, Int32 conv_type, string json_msg_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_msg_param);
            int iRet = TIMMsgRevoke(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgFindByMsgLocatorList(IntPtr conv_id, Int32 conv_type, IntPtr json_msg_Locator_array, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgFindByMsgLocatorList(string conv_id, Int32 conv_type, string json_msg_Locator_array, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_msg_Locator_array);
            int iRet = TIMMsgFindByMsgLocatorList(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgImportMsgList(IntPtr conv_id, Int32 conv_type, IntPtr json_msg_array, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgImportMsgList(string conv_id, Int32 conv_type, string json_msg_array, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_msg_array);
            int iRet = TIMMsgImportMsgList(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgSaveMsg(IntPtr conv_id, Int32 conv_type, IntPtr json_msg_array, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgSaveMsg(string conv_id, Int32 conv_type, string json_msg_array, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_msg_array);
            int iRet = TIMMsgSaveMsg(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgGetMsgList(IntPtr conv_id, Int32 conv_type, IntPtr json_get_msg_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgGetMsgList(string conv_id, Int32 conv_type, string json_get_msg_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_get_msg_param);
            int iRet = TIMMsgGetMsgList(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgDelete(IntPtr conv_id, Int32 conv_type, IntPtr json_msgdel_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgDelete(string conv_id, Int32 conv_type, string json_msgdel_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_msgdel_param);
            int iRet = TIMMsgDelete(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgListDelete(IntPtr conv_id, Int32 conv_type, IntPtr json_msg_array, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgListDelete(string conv_id, Int32 conv_type, string json_msg_array, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            IntPtr ptrMsgArray = StrToUtf8HGlobalPtr(json_msg_array);
            int iRet = TIMMsgListDelete(ptrParam, conv_type, ptrMsgArray, cb, user_data);
            Marshal.FreeHGlobal(ptrParam); 
            Marshal.FreeHGlobal(ptrMsgArray);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgClearHistoryMessage(IntPtr conv_id, Int32 conv_type, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgClearHistoryMessage(string conv_id, Int32 conv_type, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(conv_id);
            int iRet = TIMMsgClearHistoryMessage(ptrParam, conv_type, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgSetC2CReceiveMessageOpt(IntPtr json_identifier_array, Int32 opt, Int32 conv_type, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgSetC2CReceiveMessageOpt(string json_identifier_array, Int32 opt, Int32 conv_type, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_identifier_array);
            int iRet = TIMMsgSetC2CReceiveMessageOpt(ptrParam, opt, conv_type, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgGetC2CReceiveMessageOpt(IntPtr json_identifier_array, Int32 conv_type, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgGetC2CReceiveMessageOpt(string json_identifier_array, Int32 conv_type, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_identifier_array);
            int iRet = TIMMsgGetC2CReceiveMessageOpt(ptrParam, conv_type, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgSetGroupReceiveMessageOpt(IntPtr group_id, Int32 opt, Int32 conv_type, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgSetGroupReceiveMessageOpt(string group_id, Int32 opt, Int32 conv_type, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(group_id);
            int iRet = TIMMsgSetGroupReceiveMessageOpt(ptrParam, opt, conv_type, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgDownloadElemToPath(IntPtr json_download_elem_param, IntPtr path, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgDownloadElemToPath(string json_download_elem_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_download_elem_param);
            int iRet = TIMMsgSearchLocalMessages(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgDownloadMergerMessage(IntPtr json_single_msg, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgDownloadMergerMessage(string json_single_msg, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_single_msg);
            int iRet = TIMMsgSearchLocalMessages(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgSearchLocalMessages(IntPtr json_search_message_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgSearchLocalMessages(string json_search_message_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_search_message_param);
            int iRet = TIMMsgSearchLocalMessages(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgSetLocalCustomData(IntPtr json_msg_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgSetLocalCustomData(string json_msg_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_msg_param);
            int iRet = TIMGroupCreate(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMMsgBatchSend(IntPtr json_batch_send_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMMsgBatchSend(string json_batch_send_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_batch_send_param);
            int iRet = TIMGroupCreate(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupCreate(IntPtr json_group_create_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupCreate(string json_group_create_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_create_param);
            int iRet = TIMGroupCreate(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupDelete(IntPtr group_id, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupDelete(string group_id, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(group_id);
            int iRet = TIMGroupDelete(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupJoin(IntPtr group_id, IntPtr hello_msg, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupJoin(string group_id, string hello_msg, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(group_id);
            IntPtr ptrHelloMsg = StrToUtf8HGlobalPtr(hello_msg);
            int iRet = TIMGroupJoin(ptrParam, ptrHelloMsg, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            Marshal.FreeHGlobal(ptrHelloMsg);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupQuit(IntPtr group_id, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupQuit(string group_id, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(group_id);
            int iRet = TIMGroupQuit(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupInviteMember(IntPtr json_group_invite_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupInviteMember(string json_group_invite_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_invite_param);
            int iRet = TIMGroupInviteMember(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupDeleteMember(IntPtr json_group_delete_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupDeleteMember(string json_group_delete_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_delete_param);
            int iRet = TIMGroupDeleteMember(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupGetJoinedGroupList(TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupGetGroupInfoList(IntPtr json_group_getinfo_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupGetGroupInfoList(string json_group_getinfo_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_getinfo_param);
            int iRet = TIMGroupGetGroupInfoList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupModifyGroupInfo(IntPtr json_group_modifyinfo_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupModifyGroupInfo(string json_group_modifyinfo_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_modifyinfo_param);
            int iRet = TIMGroupModifyGroupInfo(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupGetMemberInfoList(IntPtr json_group_getmeminfos_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupGetMemberInfoList(string json_group_getmeminfos_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_getmeminfos_param);
            int iRet = TIMGroupGetMemberInfoList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupModifyMemberInfo(IntPtr json_group_getmeminfos_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupModifyMemberInfo(string json_group_getmeminfos_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_getmeminfos_param);
            int iRet = TIMGroupModifyMemberInfo(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupGetPendencyList(IntPtr json_group_getpendence_list_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupGetPendencyList(string json_group_getpendence_list_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_getpendence_list_param);
            int iRet = TIMGroupGetPendencyList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupReportPendencyReaded(UInt64 time_stamp, TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupHandlePendency(UInt64 time_stamp, TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupGetOnlineMemberCount(IntPtr groupid, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupGetOnlineMemberCount(string groupid, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(groupid);
            int iRet = TIMGroupGetOnlineMemberCount(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupSearchGroups(IntPtr json_group_search_groups_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupSearchGroups(string json_group_search_groups_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_group_search_groups_param);
            int iRet = TIMGroupSearchGroups(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupSearchGroupMembers(IntPtr json_group_search_group_members_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupSearchGroupMembers(string group_id, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrGroupId = StrToUtf8HGlobalPtr(group_id);
            int iRet = TIMGroupSearchGroupMembers(ptrGroupId, cb, user_data);
            Marshal.FreeHGlobal(ptrGroupId);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupInitGroupAttributes(IntPtr group_id, IntPtr json_group_atrributes, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupInitGroupAttributes(string group_id, string json_group_atrributes, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrGroupId = StrToUtf8HGlobalPtr(group_id);
            IntPtr ptrGroupAtrributes = StrToUtf8HGlobalPtr(json_group_atrributes);
            int iRet = TIMGroupInitGroupAttributes(ptrGroupId, ptrGroupAtrributes, cb, user_data);
            Marshal.FreeHGlobal(ptrGroupId);
            Marshal.FreeHGlobal(ptrGroupAtrributes);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupSetGroupAttributes(IntPtr group_id, IntPtr json_group_atrributes, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupSetGroupAttributes(string group_id, string json_group_atrributes, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrGroupId = StrToUtf8HGlobalPtr(group_id);
            IntPtr ptrGroupAtrributes = StrToUtf8HGlobalPtr(json_group_atrributes);
            int iRet = TIMGroupSetGroupAttributes(ptrGroupId, ptrGroupAtrributes, cb, user_data);
            Marshal.FreeHGlobal(ptrGroupId);
            Marshal.FreeHGlobal(ptrGroupAtrributes);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupDeleteGroupAttributes(IntPtr group_id, IntPtr json_keys, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupDeleteGroupAttributes(string group_id, string json_keys, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrGroupId = StrToUtf8HGlobalPtr(group_id);
            IntPtr ptrKeys = StrToUtf8HGlobalPtr(json_keys);
            int iRet = TIMGroupDeleteGroupAttributes(ptrGroupId, ptrKeys, cb, user_data);
            Marshal.FreeHGlobal(ptrGroupId);
            Marshal.FreeHGlobal(ptrKeys);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMGroupGetGroupAttributes(IntPtr group_id, IntPtr json_keys, TIMCommCallback cb, IntPtr user_data);

        public static int TIMGroupGetGroupAttributes(string group_id, string json_keys, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrGroupId = StrToUtf8HGlobalPtr(group_id);
            IntPtr ptrKeys = StrToUtf8HGlobalPtr(json_keys);
            int iRet = TIMGroupGetGroupAttributes(ptrGroupId, ptrKeys, cb, user_data);
            Marshal.FreeHGlobal(ptrGroupId);
            Marshal.FreeHGlobal(ptrKeys);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMProfileGetUserProfileList(IntPtr json_get_user_profile_list_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMProfileGetUserProfileList(string json_get_user_profile_list_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_get_user_profile_list_param);
            int iRet = TIMProfileGetUserProfileList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMProfileModifySelfUserProfile(IntPtr json_modify_self_user_profile_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMProfileModifySelfUserProfile(string json_modify_self_user_profile_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_modify_self_user_profile_param);
            int iRet = TIMProfileModifySelfUserProfile(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipGetFriendProfileList(TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipAddFriend(IntPtr json_add_friend_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipAddFriend(string json_add_friend_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_add_friend_param);
            int iRet = TIMFriendshipAddFriend(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipHandleFriendAddRequest(IntPtr json_handle_friend_add_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipHandleFriendAddRequest(string json_handle_friend_add_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_handle_friend_add_param);
            int iRet = TIMFriendshipHandleFriendAddRequest(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipModifyFriendProfile(IntPtr json_modify_friend_info_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipModifyFriendProfile(string json_modify_friend_info_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_modify_friend_info_param);
            int iRet = TIMFriendshipModifyFriendProfile(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipDeleteFriend(IntPtr json_delete_friend_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipDeleteFriend(string json_delete_friend_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_delete_friend_param);
            int iRet = TIMFriendshipDeleteFriend(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipCheckFriendType(IntPtr json_check_friend_list_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipCheckFriendType(string json_check_friend_list_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_check_friend_list_param);
            int iRet = TIMFriendshipCheckFriendType(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipCreateFriendGroup(IntPtr json_create_friend_group_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipCreateFriendGroup(string json_create_friend_group_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_create_friend_group_param);
            int iRet = TIMFriendshipCreateFriendGroup(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipGetFriendGroupList(IntPtr json_get_friend_group_list_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipGetFriendGroupList(string json_get_friend_group_list_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_get_friend_group_list_param);
            int iRet = TIMFriendshipGetFriendGroupList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipModifyFriendGroup(IntPtr json_modify_friend_group_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipModifyFriendGroup(string json_modify_friend_group_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_modify_friend_group_param);
            int iRet = TIMFriendshipModifyFriendGroup(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipDeleteFriendGroup(IntPtr json_delete_friend_group_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipDeleteFriendGroup(string json_delete_friend_group_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_delete_friend_group_param);
            int iRet = TIMFriendshipDeleteFriendGroup(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipAddToBlackList(IntPtr json_add_to_blacklist_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipAddToBlackList(string json_add_to_blacklist_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_add_to_blacklist_param);
            int iRet = TIMFriendshipAddToBlackList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipGetBlackList(TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipDeleteFromBlackList(IntPtr json_delete_from_blacklist_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipDeleteFromBlackList(string json_delete_from_blacklist_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_delete_from_blacklist_param);
            int iRet = TIMFriendshipDeleteFromBlackList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipGetPendencyList(IntPtr json_get_pendency_list_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipGetPendencyList(string json_get_pendency_list_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_get_pendency_list_param);
            int iRet = TIMFriendshipGetPendencyList(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipDeletePendency(IntPtr json_delete_pendency_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipDeletePendency(string json_delete_pendency_param, TIMCommCallback cb, IntPtr user_data) 
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_delete_pendency_param);
            int iRet = TIMFriendshipDeletePendency(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipReportPendencyReaded(UInt64 time_stamp, TIMCommCallback cb, IntPtr user_data);

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipSearchFriends(IntPtr json_search_friends_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipSearchFriends(string json_search_friends_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_search_friends_param);
            int iRet = TIMFriendshipSearchFriends(ptrParam, cb, user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMFriendshipGetFriendsInfo(IntPtr json_get_friends_info_param, TIMCommCallback cb, IntPtr user_data);

        public static int TIMFriendshipGetFriendsInfo(string json_get_friends_info_param, TIMCommCallback cb, IntPtr user_data)
        {
            IntPtr ptrParam = StrToUtf8HGlobalPtr(json_get_friends_info_param);
            int iRet = TIMFriendshipGetFriendsInfo(ptrParam, cb,user_data);
            Marshal.FreeHGlobal(ptrParam);
            return iRet;
        }

        [DllImport(@"imsdk.dll")]
        public extern static int TIMInit(UInt64 sdk_app_id, IntPtr json_sdk_config);

        public static int TIMInit(UInt64 sdk_app_id, string json_sdk_config)
        {
            IntPtr ptrConfig = StrToUtf8HGlobalPtr(json_sdk_config);
            int iRet = TIMInit(sdk_app_id, ptrConfig);
            Marshal.FreeHGlobal(ptrConfig);
            return iRet;
        }
        [DllImport(@"imsdk.dll")]
        public extern static IntPtr TIMGetSDKVersion();

        public static string TIMGetSDKVersionCSharp() {
            return Utf8HGlobalPtrToStr(TIMGetSDKVersion());
        }

        //[DllImport(@"imsdk.dll")]
        //public extern static UInt64 TIMGetServerTime();

        [DllImport(@"imsdk.dll")]
        public extern static int TIMUninit();

    }

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 指引
  • 最终封装SDK代码
相关产品与服务
即时通信 IM
即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕和内容审核等能力。适用于直播互动、电商带货、客服咨询、社交沟通、在线课程、企业办公、互动游戏、医疗健康等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档