Re[2]: Обмен данными между MFC DLL и C#
От: k.o. Россия  
Дата: 17.11.10 09:27
Оценка:
Здравствуйте, _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);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.