2015-01-30 4 views
0

Я вызываю функцию c dll в C#, которая возвращает 64-битный массив символов ASCII, поскольку C# использует UNICODE, как мне преобразовать массив символов ASCII в строку UNICODE?преобразовать массив символов ASCII в строку UNICODE

Я делал это раньше, имея строку в структуры, так как функция имела-структуру в качестве одного из своих аргументов следующим образом:

 public struct example 
     { 
     public uint ID; 
     [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 64)] 
     public string serialNumber; 
     }     

Я не могу использовать структуру на этот раз, как эта новая функция имеет SERIALNUMBER как один из его аргументов. Я объявил serialNumber как строку, а затем, когда импортированная функция c вызвана сбоем программы, я считаю, что причиной этого является конфликт данных?

Извините, если этот вопрос немного запутан, пытаясь изо всех сил объяснить мою проблему, любая помощь будет оценена по достоинству.

+0

Добавить 'System.Runtime.InteropServices.CharSet. Ansi' – ElderBug

+0

, который вызывает ошибку, говорящую о том, что Ansi существует в типе System.Runtime.InteropServices.CharSet. извините, я новичок в программировании – john

+0

Должен ли я добавлять это в начале? – john

ответ

0

Вы должны использовать System.Runtime.InteropServices.CharSet.Ansi так:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
public struct example 
{ 
    public uint ID; 
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 64)] 
    public string serialNumber; 
} 

Вы также можете объявить строку как массив байтов и конвертировать позже с помощью:

myString = System.Text.Encoding.ASCII.GetString(byteArray);