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