Теперь у меня есть несколько C ++ DLL и их исходный код.
Это управляемые библиотеки DLL, и я могу напрямую добавить их в проект C # в качестве ссылки. Вопрос в том, что теперь я хочу использовать их в приложении Windows Phone (C #).
Я не знаю как этого добиться, помогите пожалуйста
Я просто ничего не знаю об этих проектах C ++, и они содержат много заголовочных файлов. Нужно ли переписывать эти коды, чтобы они подходили для Windows Phone? Это будет грустная история ..
Или мне просто нужно перекомпилировать их как проекты разных типов?
Спасибо за вашего пациента
Не уверен, как Windows Phone C # делает это, но обычный C # может:
а) Загружать символы непосредственно из библиотеки C, например:
using System;
using System.Runtime.InteropServices;
static class win32
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
}
(это взято из: http://www.andyrushton.co.uk/csharp-dynamic-loading-of-a-c-dll-at-run-time/ после недолгого гугля)
Для этого вам нужно экспортировать методы интерфейса C ++ как «C», например:
extern "C" __declspec( dllexport ) int MyFunc(long parm1);
(из MSDN: http://msdn.microsoft.com/en-us/library/wf2w9f6x.aspx)
б) Используйте оболочку в C ++ / CLI для подключения неуправляемого C ++ к управляемому C #:
вот хороший пример: http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes
Обратите внимание, что синтаксис на первый взгляд несколько странный, и не может быть использовано все. Тем не менее, вы получаете возможность использовать классы C ++ — то, что экспорт «C» запрещает вам делать.
Других решений пока нет …