Ошибка вызова функции PInvoke .. с использованием метода c ++ DLL для c# - PullRequest
0 голосов
/ 11 февраля 2020

Я должен использовать эту функцию 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, но ошибка сохраняется.

Есть идеи, что может произойти?

...