The bytes represent the text 'C:\MS10046.dll' in big endian UTF-16 Unicode. In UTF-16, "characters" (or correctly called: code points) are made up of 16 bit wide code units, or in Delphi, WideChars. So each code unit is two bytes in size. In little-endian, the default for Intel-based platforms, this means that 'C' is encoded as $0043, which is a byte $43, followed by a byte $00. In big-endian, this is reversed, so 'C' (or $0043) is $00 followed by $43. The same for ':': this is $3A,$00 in little-endian, but $00,$3A in big-endian. So 14 "characters" result in the array you showed.
Since the array seems to start with a $00, this must be big-endian.
If the function you must use requires an array of bytes and a length, then you should probably call it like:
var
Dllx: TBytes;
str: string;
begin
str := 'c:\xampp\test.dll'; // I removed the spaces - they are wrong
Dllx := TEncoding.BigEndianUnicode.GetBytes(str);
if Length(Dllx) > 0 then
YourFunction(... PByte(Dllx), Length(Dllx), ...);
It would help if you showed how the array is supposed to be used, IOW, show a little more code. It is highly unusual that a DLL on Windows requires big-endian encoding.
It could well be that, if big-endian is not required at all, that you could do without the conversion:
if Length(str) > 0 then
YourFunction(..., PChar(str), Length(str) * Sizeof(WideChar), ...);
or even (it all depends on the declaraton of the function):
if Length(str) > 0 then
YourFunction(..., PChar(str), Length(str), ...);
The latter looks far more likely, but without more information, this is all guesswork, sorry.