Как я могу получить компонент COM, который можно использовать в проекте Windows phone 8 с С#

Недавно я начал работать над разработкой Windows Phone.

У меня есть проект, который был написан на языке C, в моем решении для Windows Phone 8. Я создал проект библиотеки динамической компоновки (DLL), и его можно успешно построить. В нем я использую проект компонента времени выполнения, чтобы предоставить метод DLL для проекта пользовательского интерфейса (C#). В методе у меня есть некоторые параметры указателя, я использую объект Intptr для передачи объекта byte[] в проект компонента среды выполнения. К сожалению, это привело к сбою программы.

Как я могу передать параметр указателя в проект компонента среды выполнения или проект DLL? Возможно, есть другой способ использовать метод [Dllimort] для импорта моего DLL-файла?

Любая помощь приветствуется!

PS: структура моего решения:

  1. [Проект библиотеки динамической компоновки (C++)].dll_method(void *para);

  2. [Проект компонента среды выполнения (C++)].rc_method(Intptr p)

    {
       dll_method((void*)p);
    }
    
  3. [Проект Windows Phone 8 (C#)].method()

    {
       GCHandle g = GCHandle.Alloc(byte[], GCHandleType.Pinned);
       IntPtr p = g.AddrOfPinnedObject();
       rc_method(p);
    }
    

person ParadoxGao    schedule 19.10.2012    source источник


Ответы (1)


Если вы не взаимодействуете с удаленным процессом, для вызова компонента среды выполнения Windows Phone (C++) из проекта приложения Windows Phone (C#) все, что вам нужно сделать, это добавить собственный проект в качестве ссылки.

Вы можете передать любой тип, поддерживаемый WinRT, в качестве аргументов. А что касается обратных вызовов, вы также можете использовать события (если в том же процессе) или передавать типы обратных вызовов (для RPC).

person Claus Jørgensen    schedule 19.10.2012
comment
Давайте посмотрим. Вы имели в виду, что решение должно вызывать исключение, если я запускаю проект приложения (C#), который вызывает компонент времени выполнения Windows Phone (C++) на эмуляторе Windows Phone 8? - person ParadoxGao; 19.10.2012
comment
Вы не имеете смысла. Он отлично работает как на эмуляторе, так и на устройстве. - person Claus Jørgensen; 19.10.2012
comment
О, я понимаю, но я имею в виду, что вызов компонента среды выполнения Windows Phone (C++) из проекта приложения Windows Phone (C#) работает хорошо, но если метод компонента среды выполнения Windows Phone (C++) содержит параметр, тип которого указатель, когда я вызываю метод, приложение разбилось。 - person ParadoxGao; 19.10.2012
comment
Нет абсолютно никакой причины передавать указатель, вместо этого просто передайте значение. И, как сказано, если вам нужны обратные вызовы, используйте события или типы обратных вызовов. - person Claus Jørgensen; 19.10.2012
comment
OMG, в конце концов, Microsoft просто поддерживает кодирование на C++... Спасибо за все. - person ParadoxGao; 19.10.2012