Использование CLI C ++ dll с / MDd CRT в собственном c ++ exe с / MTd CRT - PullRequest
0 голосов
/ 08 июня 2011

У меня есть собственный c ++ exe, использующий библиотеку времени выполнения / MTd. Я не могу изменить эту опцию, поскольку у меня нет большого контроля над сборкой этого exe. Мне нужно вызвать CLI C ++ DLL в этом exe, который возвращает класс с векторными переменными-членами STL. При возврате метода CLI C ++ я получаю ошибку повреждения кучи. Исходя из моего анализа, это происходит потому, что есть два разных CRT и метод освобождения векторов выполняется в собственном CRT и бомбах из-за неверного адреса.

Как мне вернуть вектор из библиотеки DLL CLI C ++, скомпилированной с другим CRT, для запуска с моим собственным exe-файлом?

1 Ответ

1 голос
/ 08 июня 2011

Ваша оценка верна - распределение, выполненное внутри одного CRT, не может быть освобождено внутри другого CRT. Это простое правило, и нет пути к нему.

Вам необходимо собрать оба модуля с одинаковыми настройками библиотеки времени выполнения или передавать только POD-типы между границами модулей.

...