Задать вопрос

Как реализовать передачу строк из C++ dll в .Net C# проект?

Есть проект на C#, к нему идёт dll на плюсах. Надо передать строку из функции в либе в шарповую прогу.
Гугл юзал. Курил иностранные ресурсы, но ничего не помогло.
Как я понял, там надо маршалинг сделать на стороне шарпа. Так у меня не получилось, непонял что надо и в каком виде на обоих сторонах написать (там были примеры с CoTaskMemAlloc на стороне плюсов (как я понял, это что-то связанное с COM), но я незнаю как это вообще прикрутить).

Перепробывал кучу вариант. Получилось разве-что на стороне плюсов перегнать чары в массив лонгов и на стороне шарпа получить инт и перегнать его в чары и в строку, но это лютые костыли.
Как нормально это реализовать? Заранее спасибо!
  • Вопрос задан
  • 5681 просмотр
Подписаться 4 Оценить 4 комментария
Решения вопроса 1
Запилил пример
#include <stdio.h>

extern "C" __declspec(dllexport) 
void __stdcall TestString(char str[]) {
  char source[] = "Привет!";
  sprintf_s(str, sizeof(source), source);
}


class Program {
  [DllImport(@"Project1.dll", CharSet=CharSet.Ansi)]
   public static extern void TestString(StringBuilder str);
        
   static void Main(string[] args) {
      var sb = new StringBuilder(4096);
      TestString(sb);

      Console.Write(sb.ToString());

      Console.ReadLine();
   }
}


Солюшн с двумя проектами C# и С++
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Trrrrr
@Trrrrr
Может подойдет BSTR?

social.msdn.microsoft.com/Forums/vstudio/en-US/2ee...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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