У меня есть приложение, которое называется агентом и имеет 2 проекта:
- C # проект
- C / C ++ DLL
Все приложение работало нормально с.NET 3.5, который мы используем для сборки с vs2008. Из-за некоторых требований мы обновили .Net Framework до версии 4.6 и версии 2019, чтобы создать это. Теперь моя служба приложений работает, но похоже, что C / C ++ dll-экспорты где-то не работают. Что я пробовал: сторона 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 #, она переходит в нарушение памяти.
Когда мы изменили на binDir.ToArray () и изменили объявление dllexport как char [] binDir, аналогичное для runDir, оно не давало доступанарушение, но это пошло внутри dll.
Хотя C dll все еще дает проблемы.
Может кто-нибудь, пожалуйста, подскажите мне, что это должно быть, что dll c / c ++ после этой миграции с 3,5 на4.6?
Я новичок в C #.
Спасибо