Аватар для Reiji Cross
30 / 30 / 4
Регистрация: 14.05.2010
Сообщений: 57

Возвращение указателя на массив символов char функцией определенной в dll

18.04.2011, 20:01. Показов 3463. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Я пытаюсь разобраться как работает подключение динамических библиотек и работа с функциями, определенными в них в c#.
В dll определены 2 функции, чтение из файла и запись в файл. Запись в файл работает на ура, а вот чтение из файла хромает, а точнее компилятор не хочет возвращать указатель из функции ReadFromFile с такой ошибкой: Pointers and fixed size buffers may only be used in an unsafe context
Вот листинг dll:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
EXPORT char* ReadFromFile(char* filename){
    FILE *file;
    long filesize = 0;
    file = fopen(filename, "r");
    fseek(file, 0, SEEK_END);
    filesize = ftell(file);
    fseek(file, 0, SEEK_SET);
    char* str;
    str = (char*)malloc(filesize);
    fread(str, sizeof(char), filesize, file);
    return str;
}
 
EXPORT void WriteToFile(char* str, char* filename){
    FILE *file;
    int length = strlen(str);
    file = fopen(filename,"w");
    fwrite (str, sizeof(char), length, file) ;
    fclose(file);
}
Вот подключение dll и исользование функции ReadFromFile:
C#
1
2
3
 [DllImport("DataBase_dll")]
        public static extern void WriteToFile(char[] str, char[] filename);
        public static extern char* ReadFromFile(char[] file);
C#
1
char* chStr = ReadFromFile(curFile.ToCharArray(0, curFile.Length));
curFile типа string
Заранее спасибо за помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2011, 20:01
Ответы с готовыми решениями:

Возвращение функцией массива (или указателя на массив)
Вопрос опытным. Имеется массив картинок TImage, который создается одной функцией. Как вызвать этот же массив из другой функции? void...

Возвращение из dll функции указателя на динамический массив
Есть функция описанная в dllextern "c" void* _stdcall _import Func1(char*, int)в нее посылается два параметра char * и int, а вернуть она...

Возвращение указателя на локальную переменную (массив)
Добрый день! Вопрос такой: Как правильно возвратить указатель на локальную переменную (или массив)? Программа ниже...

3
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
18.04.2011, 20:19
Указатели в шарпе используются только в блоках кода unsafe.
Цитата Сообщение от Reiji Cross Посмотреть сообщение
char* chStr = ReadFromFile(curFile.ToCharArray(0, curFile.Length));
Это должно быть в функции помеченной unsafe. Или примерно так:
C#
1
2
3
4
unsafe
{
   char* chStr = ReadFromFile(curFile.ToCharArray(0, curFile.Length));
}
0
 Аватар для Reiji Cross
30 / 30 / 4
Регистрация: 14.05.2010
Сообщений: 57
18.04.2011, 20:34  [ТС]
Теперь собственно выдает Error: Unsafe code may only appear if compiling with /unsafe
Я так понимаю где-то в настройках компилятора надо добавить /unsafe ?

Добавлено через 3 минуты
Вопрос второй, как объявить функцию если C# не принимает указатели? там unsafe не работает
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
18.04.2011, 20:52
Цитата Сообщение от Reiji Cross Посмотреть сообщение
Вопрос второй, как объявить функцию если C# не принимает указатели? там unsafe не работает
Имеется в виду неуправляемая функция? Вот пример обьявления, если ты об этом:
C#
1
unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}
Цитата Сообщение от Reiji Cross Посмотреть сообщение
Я так понимаю где-то в настройках компилятора надо добавить /unsafe ?
В свойствах проекта, на вкладке Построение ставишь галку Разрешить небезопасный код.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2011, 20:52
Помогаю со студенческими работами здесь

Возможно ли возвращение функцией двух значений? Именно возвращение, не ссылка или указатель
Нужна функция в которую забиваешь два числа и сначала она возвращает минимальное, после максимальное. Я пробовал делать с ссылками и это не...

Возвращение неконстантного указателя из константного указателя на строку
Не могу до конца понять один момент. Допустим, у нас есть функция searchSymbol, которая принимает два параметра: константный указатель на...

Приведение указателя на структуру к указателю на массив char
Доброго всем дня! Работаю с микроконтроллерами, возникла необходимость записывать структуру с начальными установками во флеш память МК. ...

Вызов функции из DLL (C++) с передачей указателя на массив
Добрый день! Проблема следующая: нужно вызвать функцию из DLL (написана на c++). При этом в качестве параметров передаются указатели на...

Использование указателя на массив символов
Здравствуйте! прошу довести до меня почему в первом случае цикл for не работает в отличие от второго. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru