C # WCF веб-сервис для вызовов C ++ DLL - PullRequest
1 голос
/ 21 марта 2019

Существует устаревшая C ++ DLL, созданная в Visual Studio 2015, и я работаю над тем, чтобы представить некоторые функции C ++ в качестве REST API. Для этого в том же решении создал проект веб-службы WCF и попытался вызвать функции C ++ через DllImport.

[DllImport("ExtOutPutGenerator.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int CreateFrameGenerators(string node, string axis);

В коде C ++ вышеуказанная функция объявлена ​​как,

extern "C" __declspec(dllexport) int CreateFrameGenerators(const char* node, const char* axis);

Теперь, когда я вызываю функцию C ++ через DllImport, она не работает.

То есть, когда я вызываю REST API через браузер, он выдает следующее сообщение.

The server encountered an error processing the request. See server logs for details.

Я точно знаю, что сбой происходит, когда он вызывает функцию C ++ изнутри C #. Не уверен, где найти журнал сервера.

Для целей тестирования я создал образец тестовой DLL-библиотеки C ++ в том же решении, а затем вызвал ее функцию через DllImport, и она работает нормально.

Таким образом, проблема, похоже, в устаревшей C ++ DLL.

Понятия не имею, что еще искать или как устранить неполадки.

Итак, мой вопрос,

  1. В чем может быть проблема с устаревшей C ++ DLL, которая вызывает эту проблему? Какие-то конкретные настройки проекта?

  2. Есть ли другой способ добиться этого без использования DllImport? Что-то более простое и понятное и может работать во всех проектах C ++?

1 Ответ

1 голос
/ 22 марта 2019

Предполагая, что вы правильно выполнили все части кода, другой важной вещью, которую необходимо проверить, является целевая платформа. Оба C ++ и C # должны быть собраны для одной и той же платформы.

Например, если C ++ DLL установлен на x64, то C # также должен быть собран с x64.

...