Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Работа с VC++ 6.0 и Matlab (dll)


Автор: gromo 2.9.2009, 01:35
У меня проблема: при обращении/вызове dll-файла, в ответ появляется ошибка 0xC0000005. Пихал в разные каталоги, системные в том числе, не видит.
dll создан в matlab.
если кто-то сталкивался, помогите, очень нужно.

Заранее спасибо!

Автор: andrew_121 2.9.2009, 02:54
Цитата(gromo @  2.9.2009,  01:35 Найти цитируемый пост)
при обращении/вызове

что это значит?

Автор: gromo 2.9.2009, 02:59
на этапе инициализации появляется ошибка 0xC0000005.
т.е. dll-файл не виден, хотя он находится в каталоге с приложением

Автор: andrew_121 2.9.2009, 04:02
подключаешь как - динамически, статически?

Автор: gromo 2.9.2009, 04:53
чесно говоря сам до конца не понял, похоже всётаки статически
Листинг:
Код

/*----------------------------------------------------------
* Имя файла: MatlabPlotdll.c
* Описание: вызывает DLL, созданную посредством
* Matlab compiler 2.1, для построения графика
-----------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "dataplotlib.h"
#define PI 3.14159
double data_array[200];
FILE* fp;
void main()
{
int i;
fp = fopen("c:\\data\\dlldata.txt", "w "); // В этом каталоге хранятся данные
if(fp)
{
for ( i = 0; i < 200; i ++)
{
data_array[i] = 10 * sin( ( 2 * PI / 200) * i );
fprintf( fp, " %f ", data_array[i]);
}
fclose( fp );
// Следующая функция вызывается для инициализации dataplotdll. Эта функция создается посредством Matlab Compiler и помещается в dataplotlib.dll
dataplotlibInitialize(); //********** Tут появляется ошибка!!!!!
// Данная функция обеспечивает доступ к DLL, созданной посредством Matlab Compiler
mlfDataplotdll();
// Приведенный ниже вызов завершает работу dataplotdll, созданной посредством Matlab Compiler и находящейся в dataplotlib.dll
dataplotlibTerminate();
return;
}
else
printf("");
}

Автор: Earnest 2.9.2009, 07:03
0xC0000005 - это ошибка доступа по невалидному адресу. Библиотека явно подключается динамически в
dataplotlibInitialize(); Возможна какая-то нестыковка по выравниванию, специцикации вызова и т.д. Внимательно почитай документацию, попробуй собрать примеры, а потом их потихоньку изменяй. 

Автор: smoke_man 2.9.2009, 07:45
Когда библиотеку собирал какие ключи компиляции использовал у mcc? И версия Matlab какая?

Автор: gromo 4.9.2009, 19:08
mcc -B sgl -t -W libhg:dataplotlib -T link:lib dataplotdll.m

Добавлено через 1 минуту и 45 секунд
MatLab 6.5

Автор: andrew_121 5.9.2009, 03:42
http://forum.vingrad.ru/forum/topic-271620/kw-dll-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0-%D0%BB%D0%B8%D0%BD%D0%BA.html хороший гайд по динамическому подключению длл.

Автор: gromo 5.9.2009, 06:07
всем огромное спасибо!
Проблему удалось устранить!

Автор: andrew_121 5.9.2009, 13:33
Цитата(gromo @  5.9.2009,  06:07 Найти цитируемый пост)
Проблему удалось устранить! 

На так поделись с присутствующими, способом решения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)