示例#1
0
        /// <summary>
        /// Call this function when own client connects to a teamspeak server
        /// </summary>
        /// <param name="serverConnectionHandler"></param>
        public void Ts3ServerChanged(ulong serverConnectionHandler)
        {
            if (ConnectionHandler == null)
            {
                return;
            }
            Functions.getCurrentPlaybackDeviceName(serverConnectionHandler, out string currentPlaybackDevice, out bool defaultDevice);

            Functions.getCurrentPlayBackMode(serverConnectionHandler, out string mode);
            //if the teamspeak speakers set to windows default abort
            if (mode == null)
            {
                return;
            }
            Functions.getPlaybackDeviceList(mode, out IntPtr ptr);
            unsafe
            {
                char ***c = (char ***)ptr.ToPointer();
                //loop through the two dimensional array to get the devices
                for (int i = 0; c[i] != null; i++)
                {
                    var name = Marshal.PtrToStringAnsi((IntPtr)c[i][0]);
                    var id   = Marshal.PtrToStringAnsi((IntPtr)c[i][1]);
                    if (id == currentPlaybackDevice)
                    {
                        Logging.Log($"Set playback device to <{name}>", LogLevel.LogLevel_INFO);
                        ConnectionHandler.PlaybackDevice = name;
                    }
                }
                Functions.freeMemory(ptr);
            }
        }
    internal unsafe static char[] Foo(char[] input, char[] output)
    {
        //managed char[] to fixed char*
        char *src;

        fixed(char *cptr = input)
        {
            src = (char *)cptr;
        }

        char ** ptrToPtr      = &src;
        char ***ptrToPtrToPtr = &ptrToPtr;
        //char* back to managed char[]
        IntPtr ptr = new IntPtr(**ptrToPtrToPtr);

        Marshal.Copy(ptr, output, 0, input.Length);
        return(output);
    }
    internal unsafe static char[] Foo(char[] input)
    {
        //managed char[] to fixed char*
        char *src;

        fixed(char *cptr = input)
        {
            src = (char *)cptr;
        }

        //easy way to get a char*** just for illustration purposes
        char ** ptrToPtr      = &src;
        char ***ptrToPtrToPtr = &ptrToPtr;
        //char* back to managed char[]
        IntPtr ptr = new IntPtr(**ptrToPtrToPtr);

        char[] output = new char[input.Length];
        Marshal.Copy(ptr, output, 0, input.Length);
        return(output);
    }
示例#4
0
 private static extern int FSDK_GetCameraListEx_Old(char ***CameraNameList, char ***CameraDevicePathList, out int CameraCount);
示例#5
0
 private static extern int FSDK_GetCameraList_Old(char ***CameraList, out int CameraCount);
示例#6
0
 static extern unsafe uint UAI_GetDeviceList(char ***pszDeviceList, uint *pdwDeviceCount, uint dwFlags);