newbie1992 Ответов: 1

Как передать char в C# в C++ DLL


привет привет и доброе утро
я пытаюсь передать параметр в c# в cpp-код
но это результат, который я получаю в своем cpp
формат неправильный
╕τ≡»qsαΦópdsΓ╞òí4ΘáΦTΦF`fsΦ


может ли кто-нибудь сказать мне, что не так с моим кодом
вот что я сделал

Что я уже пробовал:

в коде c#

[DllImport("C:\\Users\\user\\Desktop\\mysqlcppConnector\\Debug\\mysqlcppConnector.dll")]
        public static extern string passingChar(StringBuilder charToPass);


passingChar(new StringBuilder("pass me to cpp right now!"));


в Кодексе ЧГК :
// please ignore the return type val..
// cause this should return the data from database
// char to pass is the statement of sqlquerry
// this is just a sample code of it
__declspec(dllexport) string passing char(char* charToPass){
printf(charToPass);
return someVal;
}


кроме того
я также сделал это в своем коде c#
[DllImport("C:\\Users\\user\\Desktop\\mysqlcppConnector\\Debug\\mysqlcppConnector.dll")]
        public static extern string passingChar([MarshalAs( UnmanagedType.LPStr )] charToPass);


passingChar("pass me to cpp right now!");


это все то же самое, и я не могу получить фактическую строку, которую я пытаюсь передать в код mt cpp

0x01AA

Есть много дискуссий по этому поводу, которые вы можете найти в google: сортировка c-Google-Suche[^]

1 Ответов

Рейтинг:
2

OriginalGriff

Во-первых, правильно украсьте свой DLLImport:

[DllImport("C:\\Users\\user\\Desktop\\mysqlcppConnector\\Debug\\mysqlcppConnector.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern string passingChar(StringBuilder charToPass);
Затем помните, что строки C# не заканчиваются нулем - поэтому, если вы не передадите длину строки в C++, вам нужно вручную добавить нулевое значение в конце, иначе код C++ не будет иметь представления о том, сколько символов там. Простота printf или что-то подобное, что ожидает завершения null char* данные будут переполнять буфер без него.