Сбой библиотеки DLL C/C++ после обновления .NET framework с 3.5 до 4.6
У меня есть приложение, называемое агентом, у которого есть 2 проекта :
1. Проект C#
2. DLL C/C++
Все приложение прекрасно работало с .NET 3.5, который мы используем для сборки с vs2008.
Из-за некоторых требований мы модернизировали его .Net Framework до 4.6 и против 2019 года, чтобы построить это.
Теперь моя служба приложений работает, но похоже, что экспорт dll C/C++ где-то терпит неудачу.
Что я уже пробовал:
TAgtLib.TAStartAgent(mServerPort, mName, mBinDir, mPath, mDebug, mStdout, mDefaultLogDays, mEncryptOnly);
где TAgtLib-это класс-оболочка, который объявляет эти функции C/C++ следующим образом
[DllImport("ccplusplus.dll", CharSet = CharSet.Ansi)] public static extern int TAStartAgent(int port, string name, string bindir, string rundir, string debugOption, string stdoutOption, int mDefaultLogDays, int encryptonly);
Определение C++ :
extern "C" int _stdcall TAStartAgent(int PortNum, char *Name, char *binDir, char *runDir, char *debugOption, char *stdoutOption, int mDefaultLogDays, int encryptonly);
Всякий раз, когда отладка попадает на эту функцию из c#, она переходит в нарушение памяти.
Когда мы перешли в биндир.ToArray() и изменил объявление dllexport как char[] binDir ,simmilary для runDir,он не дал нарушения доступа, но он вошел внутрь dll.
Хотя C dll все еще дает проблемы.
Может ли кто-нибудь, пожалуйста, указать мне, что это должно влиять на dll c/c++ после этой миграции с 3.5 на 4.6?
Я относительно новичок в C#.
Спасибо
Richard Deeming
Какой тип строки ожидает ваш код C++? По умолчанию C# будет маршалировать строки как BStr, но я подозреваю, что вам нужен LPStr.
Маршалинг по умолчанию для строк | Microsoft Docs[^]
cjoshit
@Richard спасибо за ответ.
Я пробовал с LPStr , но он все еще не работает.