C # вызов C ++ DLL, передавая аргумент указатель-указатель

Ребята, не могли бы вы помочь мне решить следующую проблему? У меня есть функция C ++ DLL, и она будет вызываться другим приложением C #. Мне нужна была одна из следующих функций:

struct DataStruct
{
    unsigned char* data;
    int len;
};

DLLAPI int API_ReadFile(const wchar_t* filename, DataStruct** outData);

Я написал следующий код на C #:

class CS_DataStruct
{
    public byte[] data;
    public int len;
}

[DllImport("ReadFile.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
private static extern int API_ReadFile([MarshalAs(UnmanagedType.LPWStr)]string filename, ref CS_DataStruct data);

К сожалению, приведенный выше код не работает ... Я предполагаю, что из-за функции C ++ принимает указатель на указатель DataStruct, а я только что передал ссылку на CS_DataStruct в.

Могу ли я узнать, как передать указатель на указатель на функцию C ++? Если это невозможно, есть ли обходной путь? (API C ++ исправлен, поэтому изменение API на указатель невозможно)

Edit: Память DataStruct будет выделяться функцией c ++. До этого я понятия не имел, насколько большим должен быть массив данных. (Спасибо за комментарии ниже)

7 голосов | спросил LennonLam 6 FriEurope/Moscow2013-12-06T12:34:44+04:00Europe/Moscow12bEurope/MoscowFri, 06 Dec 2013 12:34:44 +0400 2013, 12:34:44

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132