Вызов функции C ++ / CLR из C# - передача параметров не работает - PullRequest
0 голосов
/ 24 марта 2020

прежде всего большое спасибо за то, что так много раз помогали мне с таким количеством хороших ответов! Я новичок в stackoverflow, задавая вопросы, поэтому, пожалуйста, будьте осторожны;)

Я пытаюсь вызвать функцию в dll C ++ / CLR из C# dll. -> это работает довольно хорошо.

Проблема, с которой я сталкиваюсь, заключается в том, что параметры, которые должны передаваться из C# в функцию в C ++ / CLR, поступают неправильно в C ++.

В конце мне нужно передать массив строк и некоторые логические параметры из C# в C ++ / CLR.

Что я сделал / попробовал до сих пор:

Мой C ++ / CLR part Выглядит так:

__declspec(dllexport) void __cdecl BCFConsumer::Translatehelper(char **IDs, int len, bool blinking, bool highlight, bool showOnly, bool zoom){
    vector<std::wstring> IDsVec;
    std::wstring tmp;
    msclr::interop::marshal_context context;

    for (int i = 0; i < len; i++) {
        IDsVec.push_back(std::wstring(IDs[i], IDs[i] + strlen(IDs[i])));
    }

    ShowElements(IDsVec, blinking, highlight, showOnly, zoom);
}

My C# (dll-import) part Выглядит так:

[DllImport("BCF.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "?Translatehelper@BCFConsumer@@QEAAXPEAPEADH_N111@Z")]
        public static extern void Translatehelper(string[] IDs, int size, bool blinking, bool highlight, bool showOnly, bool zoom);

вызов функции в C# выглядит так:

    public void btnshow_Click(object sender, RoutedEventArgs e)
            {
                IDs.Add("0znBcjLrbFBxuK9yivEUEO");
                IDs.Add("0cLtxHLKfA9x58$Mi2DnUp");
                Translatehelper(IDs.ToArray(), IFCIDs.Count, _blinking, _highlight, _showOnly, _zoom);
            }

Идентификаторы определяются следующим образом:

public List<string> IFCIDs = new List<string>();
...