Мой модуль C # должен связываться с dll C ++, который предоставляет набор функций и должен обрабатывать данные, возвращаемые вызываемой функцией.
Вот мой код C #, где вызывается функция C ++ (Npr),
[DllImport("CppModule.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "Npr"), System.Security.SuppressUnmanagedCodeSecurity]
public static extern IntPtr Npr([MarshalAs(UnmanagedType.LPWStr)]string moduleIDCur,
[MarshalAs(UnmanagedType.LPWStr)]string mName,
[MarshalAs(UnmanagedType.LPWStr)]string threadID,
[MarshalAs(UnmanagedType.LPWStr)]string sessionID,
[MarshalAs(UnmanagedType.LPWStr)]string reqID,
[MarshalAs(UnmanagedType.LPWStr)]string siteID,
[MarshalAs(UnmanagedType.LPWStr)]string siteName,
[MarshalAs(UnmanagedType.LPWStr)]string nodeOrder,
[MarshalAs(UnmanagedType.LPWStr)]string dateTime,
[MarshalAs(UnmanagedType.LPWStr)]string rType,
[MarshalAs(UnmanagedType.LPWStr)]string rCode,
[MarshalAs(UnmanagedType.LPWStr)]string headStr,
[MarshalAs(UnmanagedType.LPWStr)]string cookStr,
[MarshalAs(UnmanagedType.LPWStr)]string userAgent,
int flag);
...
IntPtr rets = Npr(reqHttp.Url.PathAndQuery,rAddr,Thread.CurrentThread.ManagedThreadId.ToString(),sessionID,reqGUID,
siteID,siteName,nodeStr,DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss", CultureInfo.GetCultureInfo("en-US")),reqHttp.RequestType,
HttpContext.Current.Response.StatusCode.ToString(), headers, cookieStr, uAgent,
flag); // Native Call from C#
...
В CppModule.dll
EXTERN_C WCHAR* __cdecl Npr(WCHAR* testString,WCHAR* mname,WCHAR* threadID,WCHAR* sessionID,
WCHAR* rID,WCHAR* siteID,WCHAR* siteName,WCHAR* nodeOrder,
WCHAR* dateTime,WCHAR* rType,WCHAR* rCode,WCHAR* headStr,WCHAR* cookieStr,WCHAR* uAgent,int flag)
{ ... ... return wcharPtr;}
Этот вызов функции Npr случайным образом выдает исключение. Сообщение об исключении: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
По номеру строки вызова функции Npr в C #. Я изменил эту функцию Npr, чтобы вернуть WCHAR * недавно , откуда происходит случайный сбой. Мне не хватает маршалинга, связанного с взаимодействием или подобного?