Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, SetTom, Вы писали:
ST>>Есть dll написанная в MFC, в ней одна функция описана как
_FR>ST>>extern "C" __declspec(dllexport) const BOOL __cdecl Encrypt(CassetProperty* lpPostData, TCHAR *returnBuffer)
_FR>
_FR>Функция ожидает указатель на структуру, а вы ей передаёте копию экземпляра структуры. Где вы видели пример интеропа StringBuilder через ref?
_FR>_FR>[DllImport("CassetEncrypter.dll", SetLastError = true)]
_FR>private static extern bool Encrypt(ref CassetProperty postData, [Out] StringBuilder data);
_FR>
_FR>Почитайте аккуратно и внимательно Marshaling Data with Platform Invoke
Нужно ещё тип поменять на int (BOOL в WinAPI это typedef на int) и задать правильное соглашение о вызове (по умолчанию будет stdcall):
[DllImport("CassetEncrypter.dll", CallingConvention = CallingConvention.Cdecl, SetLastError = true)]
private static extern int Encrypt(ref CassetProperty postData, [Out] StringBuilder data);