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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с dll от с++(unmanage) в C#, вызов методов. Методу передается адрес на переменную 
:(
    Опции темы
xell29
Дата 2.3.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго всем времени суток!

Вот уже второй день бьюсь над одной проблемой.... Нужно использовать DLL от С++ в проекте на С#, пересмотрел форум, спрашивал у гугля - но без результатно(

Суть проблемы:

В вызываемом методе используются int SomeFunc(const char * s, Tids * ids) ... Где Tids - struct, этот struct Tids я вроде как описал.... 
на с++ должно выглядеть так:
Код


const unsigned char MAX_WORD_COUNT=200;

struct Tid
{
unsigned long lnk; 
unsigned char en; 
};
struct Tids
{
Tid ids[MAX_WORD_COUNT];         
int count;
};


typedef int (*p4Func)(const char * s, Tids * ids);
    p4Func pFind;


pFind   =  (p4Func)GetProcAddress(MDLL_HANDLE,"FindWID");

//Вызов функции 
int count;
Tids Uids;

 count=(*pFind)(instr, &Uids); 


^^ Это на с++, я же переписал так:

Код

        public class Tids // Почему класс? Потому что в структуре не получилось объявить массив( Скорее  всего и в этом
        {                     // тоже косяк, просто я не знаю как правильно....
            public Tid[]  ids = new Tid[200];
            public int  count;

            public Tids()
            {

                for (int i = 0; i < ids.Length; i++)
                {
                    ids[i] = new Tid();
                    
                }
                
                count = 0;
            }
        }

        public class Tid
        {
            public UInt32 lnk { get; set; } 
            public Byte en { get; set; }  

            public Tid()
            {
                lnk = new UInt32();
                en = new Byte();
            }
            public Tid(UInt32 lnk_, Byte en_)
            {
                lnk = lnk_;
                en = en_;
            }
        }

        [DllImport("some.dll", CharSet = CharSet.None)]
        public static extern int FindWID(String s, Tids  ids);


//Вызов функции 
int count;
String instr_ = "slovo";
count = FindWID(instr_, Uids);


Вот добрался до вызова функции из длл-ки , я ее описал как:int SomeFunc(String s, Tids  ids) - пытаюсь вызвать, результат выполнения возвращается и  должна записываться информация в Tids  ids.... но она не пишется, потому что должен передаватся адрес на  ids....
Я пробовал написать это же на С++, там вызов функции выполняется так:count=(*pFind)(instr, &Uids); И работает все отлично..... Я даже пробовал в одном проекте включить и код на с++, который должен был работать с длл-кой... но компиллер его даже не обрабатывает.....

Вот собственно и вопрос как можно получить иформацию из фукции DLL, если передается в функцию адрес на переменную, куда собственно и пишется результат.....
И еще вопрос - я наверное не совсем корректно описал типы, которые должны использоваться для работы....

PM MAIL   Вверх
mrbrooks
Дата 3.3.2010, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



изучите работу с DllImport
PM MAIL   Вверх
evkwarrior
Дата 8.6.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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