#c# #wcf #visual-c #dllimport
#c# #wcf #visual-c #dllimport
Вопрос:
Существует устаревшая библиотека DLL C , созданная в 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 #. Не уверен, где найти журнал сервера.
В целях тестирования я создал образец C test DLL в том же решении, а затем вызвал его функцию через DllImport, и это работает нормально.
Похоже, проблема связана с устаревшей C DLL.
Я понятия не имею, что еще искать или как устранить неполадки.
Итак, мой вопрос,
-
В чем может быть проблема с устаревшей C DLL, которая вызывает эту проблему? Какие-либо конкретные настройки проекта?
-
Есть ли другой способ добиться этого без использования DllImport? Что-нибудь более простое и чистое, что могло бы работать во всех проектах C ?
Комментарии:
1. Приведенный вами здесь код в порядке. Нам нет смысла гадать. Вам нужно выполнить отладку. Начните с журналов.
Ответ №1:
Предполагая, что вы правильно выполнили всю часть кодирования, другая важная вещь, которую следует проверить, — это целевая платформа. Оба C и C # должны быть созданы для одной платформы.
Например, если для C DLL установлено значение x64, то C # также должен быть собран с использованием x64.
Комментарии:
1. Это помогло! C был x64, а C # был настроен на AnyCPU. Как только C # был установлен на x64, все работало как по маслу.