Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт очереди из С++ в С#, Как обьявить в шарпе? 
:(
    Опции темы
agealex
Дата 3.9.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Вот кусок кода



Код

С++
...

#ifdef DRIVER_EXPORTS
#define DRIVER_API __declspec(dllexport)
#endif

DRIVER_API std::queue<UCHAR> qRecv                     ;

...

С#
[DllImport("C:/pockettest/Driver.dll")]
  public static extern queue<byte> qRecv;
 - знаю что не верно как правельно обьявить?  

и как потом вынуть оттуда элемент? в с++ разобрался а в шарпе еще нет

или мне нужно экспортировать из с++ функцию которая возвращает элемент очереди или указатель на этот элемент? вобщем как это можно сделать? smile 

спасибо

Это сообщение отредактировал(а) agealex - 3.9.2007, 15:47
PM MAIL   Вверх
FREEDEV
Дата 3.9.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



вот пример для функций, попробуй от него соорудить

 private const string MYDLL = "mydll.dll";
Код

 [DllImport(MYDLL,
            EntryPoint="SomeFunction",
            CallingConvention=CallingConvention.StdCall)]
        private static extern int Init(IntPtr SomeVariable);



т.к. компилятор дописывает информацию к именам функций/переменных тебе понадоьбиться  утилитка dumpbin. она выведет имена переменных и функций в том виде в котором они находяться в dll:
dumpbin /exports MyDll.dll

--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
agealex
Дата 3.9.2007, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



 К сожалению не знаю, что за утилитка- если она внешняя - то я не могу ее использовать пока нашел только вот такой пример
 с использованием маршала

Код

С++
#ifdef DRIVER_EXPORTS
#define DRIVER_API __declspec(dllexport)
#endif
//return false - очередь пуста
queue<UCHAR> qRecv             ;
DRIVER_API bool  DrvMsgREcv(int MsgSize,UCHAR * QElement)

    if(!qRecv.empty())
    {
        QElement = (qRecv.front());
        qRecv.pop();
        MsgSize = sizeof(&QElement);
        return 1;
    }
    return 0;

C#


 [DllImport("C:/pockettest/Driver.dll")]
 public static extern bool DrvMsgRecv(ref IntPtr MsgSize,ref IntPtr QElement);

 public const int bufsize = 200; // Максимальный размер буфера

 public byte[] buffer = new byte[bufsize]; //Буфер 
 ...тут функция
 Marshal.Copy(QElement, buffer, 0, MsgSize);
 

Что то примерно такое только еще до конца не разобрался- но в теории должно работать, к утру узнаю надеюсь если поможите то и раньшеsmile
PM MAIL   Вверх
FREEDEV
Дата 3.9.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: 1
Всего: 3



SDK Command Promt -> dumpbin - будешь знать как компилятор украсил название твоей функции, хотя может в твоем варианте это и не нужно, но лучше глянуть
--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.5266 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.