DllImport из с++ подскажите непонятные моменты - C#

Узнай цену своей работы

Формулировка задачи:

[DllImport("myLib.dll", CharSet = CharSet.Ansi, EntryPoint = "Print", CallingConvention = CallingConvention.Cdecl)]
        
        private extern static IntPtr Print(string a, string b);
      
        public static string Print2(string a, string b) 
        {
            return Marshal.PtrToStringAnsi(Print(a, b));
        }
Вариант №1:
extern "C" __declspec(dllexport) const char* Print(char* a, char* b) 
{
    int len =(int)malloc((strlen(a)+strlen(b)+1));
    char *tmp = new char[len] ;
    strcpy_s(tmp, len,a);
    strcat_s(tmp, len,b);
    cout <<len<<"\n";//что то дохрена как то памяти выделяется при Print2("123aв", "456апв") len = 68 000 000  где я ошибся?
    return tmp;        
}
1. Что то дохрена как то памяти выделяется при Print2("123aв", "456апв") len = 68 000 000 где я ошибся? 2. Что делать с памятью ведь ее очистить как то надо (delete []tmp)? Вариант №2:
extern "C" __declspec(dllexport) const char* Print(char* a, char* b) 
{
    //setlocale(LC_ALL, "rus");
    //SetConsoleCP(1251);
       //SetConsoleOutputCP(1251);
    std::string tmp1(a);
    std::string tmp2(b);
    return (tmp1 + tmp2).c_str();
}
В варианте №2 никак не могу добиться вывода текста нормально, одни кракозябры получаю как поправить? Модераторы поправте BB коды пожалуйста с Code на С++ и C# а то у меня панель не пашет что то

Решение задачи: «DllImport из с++ подскажите непонятные моменты»

textual
Листинг программы
new string(new char[] { '5', '\x0', 'g' })

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5