Я провел несколько часов в поисках ответа, поэтому понял, что если я задам себе этот вопрос, то смогу, наконец, найти решение своей проблемы. Во-первых, чтобы описать, что я хочу сделать: Итак, , чтобы описать дизайн выше, у меня есть плагин .dll, написанный на чистом С++ (я не хочу, чтобы он содержал какой-либо код .Net). Этот плагин С++ будет использоваться с программной платформы. Теперь я хочу, чтобы служба Windows С# взаимодействовала с программной платформой, но она может делать это только через dll С++. По этой причине я обернул всю функциональность плагина C++ в Wrapped Dll (я экспортировал функциональность), и я использую Wrapped Dll в службе Windows C#.
Теперь у меня есть тестовый метод, чтобы проверить, нормально ли работает экспорт функций С++ (всего лишь простой метод, возвращающий сумму двух целых чисел), и я вижу, что служба Windows может взаимодействовать с неуправляемой dll С++ в правильный путь, я получаю правильные результаты. У меня проблема, когда я пытаюсь взаимодействовать с программной платформой через неуправляемую dll С++. Я получаю следующую ошибку:
Я понял, что ошибка должна быть связана с тем, что неуправляемая dll не может быть доступна программной платформе и обернутой dll одновременно. Чтобы решить эту проблему, я обнаружил, что решение состоит в том, чтобы добавить неуправляемую dll в GAC. Но чтобы поместить dll в GAC, у dll должно быть строгое имя, но я обнаружил, что не могу подписывать строгое имя для неуправляемого кода, если у меня не включен параметр /clr. Но когда у меня включена эта опция, неуправляемая dll не компилируется.
Подводя итог, могу ли я каким-либо образом получить доступ к моей неуправляемой dll программной платформой и из упакованной dll? Без интеграции .Net в мой неуправляемый код?
Я потратил много часов на поиск решения, поэтому было бы здорово, если бы кто-нибудь из вас показал мне немного света в туннеле!
Спасибо
[DllImport("C:\\Path\\MyNativeDll.dll", EntryPoint = CheckUserGroup")] public static extern bool _CheckUserGroup(string group);
Вот как я импортирую метод из NativeDll в ManagedDll.public bool CheckUserGroup(string group) { return _CheckUserGroup(group); }
И вот как это взаимодействует. --› Этот метод взаимодействует с программной платформой, получает результат и возвращает его в manageDLL, а из управляемой Dll — в службу Windows c#. Но, - person CompuPlanet   schedule 25.11.2014[DllImport("C:\\Path\\MyNativeDll.dll", EntryPoint = "TestMethod")] public static extern int _TestMethod(int x, int y);
, который выполняет расчет для неуправляемого плагина без взаимодействия с программной платформой, результаты, которые я получаю в службе Windows С#, верны. Итак, именно поэтому я говорю, что я не уверен, что это ошибка в обертке. - person CompuPlanet   schedule 25.11.2014C:\\Path\\MyNativeDll.dll
. Кроме того, переместите все библиотеки DLL платформы в каталог. - person BendEg   schedule 25.11.2014extern "C" MYNATIVEDLL_API bool __cdecl CheckUserGroup(LPCSTR clientGroup)
так определяется метод. И внутри метода я вызываю API программной платформы, чтобы получить UserGroup, и я сравниваю его с тем, который я получаю в качестве параметра. Функциональность правильная, так как я использовал ее раньше. Работающий TestMethod таков:extern "C" SPOTOPTIONMTPLUGIN_API int __cdecl TestMethod(int x, int y) { return x+y; }
В моих первых двух комментариях выше я показываю вам код в WrappedDll. Это код из библиотеки Native c++. - person CompuPlanet   schedule 25.11.2014