2013-09-24 3 views
0

я побежал анализ кода на полезности я сохранении, и посоветовал мне изменить это:Почему анализ кода в VS2013 RC приводит меня в коробку?

private static extern int ReadMenu1File(string Menu1Path); 

... к этому:

private static extern int ReadMenu1File(UnmanagedType.LPWStr Menu1Path); 

... с этим словоблудием: " Укажите маршалинг для аргументов строки P/Invoke Чтобы уменьшить риск безопасности, укажите параметр «Menu1Path» как Unicode, установив DllImport.CharSet в CharSet.Unicode или явно маршалируя параметр как UnmanagedType.LPWStr. Если вам нужно маршевать эту строку как ANSI или зависит от системы, явно укажите маршалы и установите BestFitMapping = false; для дополнительной безопасности также установите ThrowOnUnmappa bleChar = True «.

... но когда я сделал, он говорит, «Имя типа„LPWSTR“не существует в типе„System.Runtime.InteropServices.UnmanagedType“» и "«System.Runtime.InteropServices. UnmanagedType.LPWStr 'является «полем», но используется как «тип» «

Пополнение кода не помогает (никаких предложений после ввода« UnmanagedType. ») И нет опции контекстного меню, чтобы добавить отсутствующий, используя ,

+0

В чем именно * был создан оригинальный совет? –

+0

Обновлено. –

ответ

4

Я подозреваю, что вы неверно истолковали совет. Я подозреваю, что это было на самом деле предполагает:

private static extern int ReadMenu1File([MarshalAs(UnmanagedType.LPWStr)] 
             string Menu1Path); 

EDIT: Это согласуется с советом:

или по явно сортировочной параметр как UnmanagedType.LPWStr

Это не то же самое, как говорят " Измените тип параметра на UnmanagedType.LPWStr "- это просто говорит вам, что вы должны маршал параметр.

Другие рекомендации должны быть установлены вместо [DllImport].

5

Вы уверены, что не хотите, чтобы вы украсили параметр атрибутом [MarshalAs(UnmanagedType.LPWStr)]? Например:

private static extern int ReadMenu1File(
          [MarshalAs(UnmanagedType.LPWStr)] string Menu1Path); 

UnmanagedType является enum, так что вы пытаетесь использовать один из своих членов в качестве типа, поэтому компилятор жалуется.

 Смежные вопросы

  • Нет связанных вопросов^_^