Я должен использовать эту функцию dll из проекта C ++ в моем C# коде.
C ++:
BOOL __stdcall ReadString(LPTSTR valueName, LPTSTR value, LPTSTR defaultValue, int subTree, LPCTSTR serverName, long stnNumber) {
int ris;
CScatRegistry reg(subTree, FALSE, serverName, stnNumber);
ris = reg.Read(valueName, value, defaultValue);
return ris;
}
Я импортирую с помощью DllImport следующим образом:
C#:
[DllImport("DHRegistry.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
static extern long ReadString([MarshalAs(UnmanagedType.LPTStr)] string valueName,
[MarshalAs(UnmanagedType.LPTStr)] string value,
[MarshalAs(UnmanagedType.LPTStr)] string defaultValue,
[MarshalAs(UnmanagedType.I4)] int subTree,
[MarshalAs(UnmanagedType.LPTStr)] string serverName,
[MarshalAs(UnmanagedType.I8)] long stnNumber);
и когда я вызываю функцию 'ReadString', она показывает стандартную ошибку 'При вызове функции PInvoke' […] 'разбалансирована ошибка стека.
public string fooNameFunction(string strNAME, string strDefaultValue, int pathKey = Constants.REG_SUBT_TEMP, string serverName = null, long stnNumber = 0)
long lRegReturnValue;
lRegReturnValue = ReadString(strNAME, strValue, strDefaultValue, pathKey, serverName, stnNumber); //error here
return ""; //has nothing to do with my error
}
Я уже пробовал с CallingConvention.Cdecl, но ошибка сохраняется.
Есть идеи, что может произойти?