public static string TranslateString(string str) { if (String.IsNullOrEmpty(str)) return str; UnmanagedStringHandle stringHandle = UnmanagedStringHandle.Empty; try { StringEncoding mirandaEncoding = MirandaEnvironment.MirandaStringEncoding; LanguagePackEncoding encoding = (mirandaEncoding == StringEncoding.Unicode ? LanguagePackEncoding.Unicode : LanguagePackEncoding.Ansi); stringHandle = new UnmanagedStringHandle(str, mirandaEncoding); IntPtr translatedPtr = (IntPtr)MirandaContext.Current.CallService(MS_LANGPACK_TRANSLATESTRING, (UIntPtr)encoding, stringHandle.IntPtr); return translatedPtr == stringHandle.IntPtr ? str : Translate.ToString(translatedPtr, mirandaEncoding); } catch (Exception e) { throw new MirandaException(TextResources.ExceptionMsg_ErrorWhileCallingMirandaService, e); } finally { stringHandle.Free(); } }
public void FreeTest() { UnmanagedStringHandle handle = new UnmanagedStringHandle("foo"); handle.Free(); handle = UnmanagedStringHandle.Empty; handle.Free(); }
public static int BroadcastAck(string moduleName, AckType type, bool success, IntPtr contactHandle, IntPtr processHandle, IntPtr lParam) { UnmanagedStringHandle pModuleName = UnmanagedStringHandle.Empty; try { pModuleName = new UnmanagedStringHandle(moduleName, StringEncoding.Ansi); return BroadcastAck(pModuleName.IntPtr, type, success, contactHandle, processHandle, lParam); } finally { pModuleName.Free(); } }
public static IntPtr LoadProtocolIcon(string protocolName, StatusMode status) { UnmanagedStringHandle protoNamePtr = UnmanagedStringHandle.Empty; try { protoNamePtr = new UnmanagedStringHandle(protocolName, StringEncoding.Ansi); return (IntPtr)MirandaContext.Current.CallService(MS_SKIN_LOADPROTOICON, protoNamePtr.IntPtr, (IntPtr)status); } finally { protoNamePtr.Free(); } }
private unsafe void SimulateNewEvent() { DBEVENTINFO info = new DBEVENTINFO(0, IntPtr.Zero); info.Module = Translate.ToHandle("ICQ", StringEncoding.Ansi).IntPtr; UnmanagedStringHandle str = new UnmanagedStringHandle("aěščřšžšž", StringEncoding.MirandaDefault); info.BlobSize = (uint)str.Size; info.BlobPtr = str; info.EventType = 0; info.Flags = 0; info.Timestamp = Utilities.GetTimestamp(); IntPtr result = new IntPtr(MirandaContext.Current.CallService("DB/Event/Add", Translate.ToHandle(MirandaContext.Current.MirandaDatabase.FindContact("177147220", ContactInfoProperty.UniqueID, StringEncoding.Ansi).MirandaHandle), new UnmanagedStructHandle<DBEVENTINFO>(ref info))); }
public void ConstructorTest() { const string str = "foo"; UnmanagedStringHandle handle = UnmanagedStringHandle.Empty; try { handle = new UnmanagedStringHandle(str); Assert.AreEqual<string>(str, Marshal.PtrToStringAnsi(handle.IntPtr)); } finally { handle.Free(); } try { handle = new UnmanagedStringHandle(str, StringEncoding.Unicode); Assert.AreEqual<string>(str, Marshal.PtrToStringUni(handle.IntPtr)); } finally { handle.Free(); } }
protected override unsafe bool PerformMerge() { ContactInfo contactInfo = GetContact(); IntPtr blobPtr = Marshal.AllocHGlobal(eventBlob.Length); UnmanagedStringHandle moduleStrPtr = new UnmanagedStringHandle(eventModule, StringEncoding.Ansi); try { Marshal.Copy(eventBlob, 0, blobPtr, eventBlob.Length); DBEVENTINFO eventInfo = this.eventInfo; eventInfo.Module = moduleStrPtr.IntPtr; eventInfo.Flags |= (uint)DatabaseEventProperties.Read; eventInfo.BlobSize = (uint)eventBlob.Length; eventInfo.BlobPtr = blobPtr; int eventHandle = MirandaContext.Current.CallService(MS_DB_EVENT_ADD, Translate.ToHandle(contactInfo.MirandaHandle), new IntPtr(&eventInfo)); return (eventHandle != 0); } finally { if (blobPtr != IntPtr.Zero) Marshal.FreeHGlobal(blobPtr); moduleStrPtr.Free(); } }