Я думаю, что вам нужно изменить первую строку на:
[DllImport("cryptopp.dll",
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
Если вы хотите получить очень информативный, вы также можете добавить эти:
public static extern IntPtr RSAEncryptString(
[In, MarshalAs(UnmanagedType.LPStr)] string filename,
[In, MarshalAs(UnmanagedType.LPStr)] string seed,
[In, MarshalAs(UnmanagedType.LPStr)] string message);
IIRC думаю, что CharSet
должен позаботиться о кодировке для вас, но если это не так, используйте MarshalAs
также, как показано выше.
Редактировать:
О, я думаюЯ понял, почему вы все еще получаете ошибку!В вашем коде все еще были вышеуказанные проблемы, но он по-прежнему ошибочен, потому что вы не можете вернуть объект string
, поскольку он не является управляемым объектом;вам нужно вернуть указатель (например, IntPtr
), а затем использовать Marshal.PtrToStringAnsi
!
(я действительно не смотрел ваш тип возврата, когда отвечал на это сначала.)