Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2015, 09:27   #1
GonzA
Пользователь
 
Регистрация: 11.08.2008
Сообщений: 19
По умолчанию Ошибка экспорта функции неуправляемого кода

Здравствуйте,

У меня ошибка возникает когда я пытаюсь вызвать функцию неуправляемого кода. Посмотрите пожалуйста

Код:
private class MSRecord 
        {
          char            record;            /* Mini-SEED record */
          int             reclen;            /* Length of Mini-SEED record in bytes */
  
          /* Pointers to SEED data record structures */
          char      fsdh;          /* Fixed Section of Data Header */
          char      blkts;         /* Root of blockette chain */
          char      Blkt100;       /* Blockette 100, if present */
          char      Blkt1000;      /* Blockette 1000, if present */
          char      Blkt1001;      /* Blockette 1001, if present */
  
          /* Common header fields in accessible form */
          int         sequence_number;   /* SEED record sequence number */
          string      network;       /* Network designation, NULL terminated */
          string      station;       /* Station designation, NULL terminated */
          string      location;      /* Location designation, NULL terminated */
          string      channel;       /* Channel designation, NULL terminated */
          char            dataquality;       /* Data quality indicator */
          long          starttime;         /* Record start time, corrected (first sample) */ //!? - это поле размером 64 бита (лонг)
          double          samprate;          /* Nominal sample rate (Hz) */
          long        samplecnt;         /* Number of samples in record */
          short          encoding;          /* Data encoding format */
          short          byteorder;         /* Original/Final byte order of record */
  
          /* Data sample fields */
          Object       datasamples;       /* Data samples, 'numsamples' of type 'sampletype'*/
          long         numsamples;        /* Number of data samples in datasamples */
          char         sampletype;        /* Sample type code: a, i, f, d */
  
          /* Stream oriented state information */
          char    ststate;           /* Stream processing state information */

          public MSRecord() 
          {
          
          } 
        }
        
        //P/Invoke declaration
        [DllImport("mseedDLL.dll")]
        private static extern void ms_readmsr (MSRecord msr, string inputfile, int reclen, string null1, string null2 ,int one ,bool dataflag, int verbose);
        
        [STAThread]
        static void Main()
        {
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
            MSRecord msr1 = new MSRecord();
            string path = Environment.CurrentDirectory;

            path = path.Substring(0, path.LastIndexOf("\\"));
            path = path.Substring(0, path.LastIndexOf("\\"));
            path = path.Substring(0, path.LastIndexOf("\\"));
            path = path.Substring(0, path.LastIndexOf("\\"));
            path = path.Substring(0, path.LastIndexOf("\\"));

            path = path + "\\2_Даные\\mseedExample.mseed";

            ms_readmsr(msr1,path,-1,null,null,1,true,0);

            System.Console.WriteLine(msr1.ToString());
            System.Console.ReadLine();
Говорит что не может подключить mseedDLL.dll
Как правильно сделать?
GonzA вне форума Ответить с цитированием
Старый 23.03.2015, 09:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

1) DLL где лежит?
2) Текст ошибки на буржуинском в студию.
3) Ошибка на этапе компиляции или во время выполнения?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2015, 08:48   #3
GonzA
Пользователь
 
Регистрация: 11.08.2008
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
1) DLL где лежит?
2) Текст ошибки на буржуинском в студию.
3) Ошибка на этапе компиляции или во время выполнения?
DLL лежит в папочке проекта
На буржуйском он говорит что не подключена ДЛЛ
Ошибка во время компиляции

Скорее всего в студии длл надо подключить, но я это ни разу не делал))


Сейчас положил библиотеку в папку с экзешником ошибка прошла.
Теперь ругается что не может найти точку входа в функцию. Думаю проблема в том что я скомпилировал библиотеку без def файла. Может ли это быть из-за этого?

ошибка следующая:
Не удается найти точку входа "ms_readmsr" в DLL "mseedDLL.dll".

Последний раз редактировалось Stilet; 24.03.2015 в 09:31.
GonzA вне форума Ответить с цитированием
Старый 24.03.2015, 09:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Не удается найти точку входа
Надо знач открывать либу скомпилированную какими-нибудь просмотрщиками библиотек и смотреть есть ли такая функция в экспорте библиотеки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2015, 09:50   #5
GonzA
Пользователь
 
Регистрация: 11.08.2008
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Надо знач открывать либу скомпилированную какими-нибудь просмотрщиками библиотек и смотреть есть ли такая функция в экспорте библиотеки.
Я перекомпилировал длл с деф файлом и всё получилось.

Теперь у меня следующая проблема. Дело в том что функция которая мне нужна использует структуру. Могули я экспортировать всю структуру из библиотеки как я делаю с функцией или надо создавать копию структуры и использовать её?
GonzA вне форума Ответить с цитированием
Старый 24.03.2015, 10:51   #6
GonzA
Пользователь
 
Регистрация: 11.08.2008
Сообщений: 19
По умолчанию

Цитата:
Сообщение от GonzA Посмотреть сообщение
Я перекомпилировал длл с деф файлом и всё получилось.

Теперь у меня следующая проблема. Дело в том что функция которая мне нужна использует структуру. Могули я экспортировать всю структуру из библиотеки как я делаю с функцией или надо создавать копию структуры и использовать её?
Ошибка:
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
GonzA вне форума Ответить с цитированием
Старый 24.03.2015, 10:53   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

MSRecord в оригинале это структура же?
почему вы передаете класс?
В C# классы и структуры имеют больше отличий чем в С++.

далее, вы уверен что верно составили делегат вашей функции?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать дублирование кода шаблонной функции higimo Общие вопросы C/C++ 1 25.12.2013 12:27
ошибка кода waitingforpron Общие вопросы C/C++ 5 01.10.2011 14:24
Функции, сокращение кода Neolit1819 Помощь студентам 0 31.05.2011 08:48
ошибка кода kotopezzz Общие вопросы Delphi 16 16.02.2011 10:26
Ищу код функции для экспорта Datagridview в excel kolchakA Общие вопросы .NET 1 10.07.2010 10:32