/// <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); }
private static extern int FSDK_GetCameraListEx_Old(char ***CameraNameList, char ***CameraDevicePathList, out int CameraCount);
private static extern int FSDK_GetCameraList_Old(char ***CameraList, out int CameraCount);
static extern unsafe uint UAI_GetDeviceList(char ***pszDeviceList, uint *pdwDeviceCount, uint dwFlags);