示例#1
0
        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();
        }
示例#3
0
        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();
            }
        }
示例#4
0
文件: Skin.cs 项目: tomasdeml/hyphen
        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();
            }
        }
示例#5
0
        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();
            }
        }
示例#7
0
        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();
            }
        }