2010-03-28 2 views
1

При попытке вызвать (DLLImport) внешнюю dll C++ из приложения .net с файлом манифеста с requireAdministrator, я получаю эту ошибку, пытающуюся вызвать функцию из dll C++ в Windows 7 с включенным UAC.Ошибка DLLImport: System.AccessViolationException с файлом манифеста и C#

Метод Я зову: шифрует

System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

общественного класс BlowFish { [DllImport ("BlowfishTool.dll", НаборСимволы = CharSet.Auto)] общественность статической ехЬегп Строки зашифровать (Строка strData, строка strPassword);

[DllImport("BlowfishTool.dll", CharSet = CharSet.Auto)] 
    public static extern String EnCrypt(String strData, String strPassword, bool doNotUsePassChecking); 

    [DllImport("BlowfishTool.dll", CharSet = CharSet.Auto)] 
    public static extern String DeCrypt(String strData, String strPassword, bool doNotUsePassChecking); 

    [DllImport("BlowfishTool.dll", CharSet = CharSet.Auto)] 
    public static extern String DeCrypt(String strData, String strPassword); 


    public static String EnCrypts(String strData, String strPassword) 
    { 
     return EnCrypt(strData, strPassword, true); 
    } 
} 

}

ответ

0

Это происходит потому, что - строка при создании выделяет память для 4-х элементов. Если размер возвращаемого параметра больше 4, то есть ошибка.

Необходимо использовать IntPtr и Marshal.PtrToStringAuto :-)

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