Что я пытаюсь сделать: у меня есть встроенный код C, который выполняет некоторую обработку сигнала. У меня также есть набор инструментов C#. Я хотел бы использовать код C# для вызова встроенного кода C с некоторыми формами колебаний, чтобы «проверить» алгоритм и посмотреть, что он думает/делает.C# Pinvoke of C Code issue
Что я сделал:
встроенный код C:
__declspec (dllexport) void SigInit(int Flag);
void SigInit(int Flag) { ... }
компилировать как Win32 DLL. Тип конфигурации - «Динамическая библиотека (DLL)», а MFC - «Использует стандартные библиотеки Windows». Я «просмотрел» свою библиотеку в Visual Studio 2010 Class viewer, и все выглядит хорошо.
Тогда в моем C# код (VS2010 с .NET 4.0):
public static class ProcessSignals
{
[DllImport(@"C:\Users\rpease\Desktop\SigLibrary.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SigInit(int Flag);
}
Но всякий раз, когда я пытаюсь запустить основную программу и вызовите ProcessSignals.SigInit (0):
Не удается найти точка входа с именем 'SigInit' в DLL 'C: \ Users \ rpease \ Desktop \ SigLibrary.dll'.
Я думал, что это проблема с именами, но я думал, что позаботился об этом. Предложения оценены. Я думаю, что следую рекомендациям: PInvoke DLL in C#, но не могу пройти мимо этого.
Спасибо,
Roger
Я выхожу на конечность и говорю, что он использует украшенные имена. Вы можете использовать программу DLL Explorer и проверить, что такое подпись. –
Используйте Dependency Walker (например), чтобы проверить, какие функции экспортируются вашей DLL. –