Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
sfinexer
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 172
1

Передать в dll указатель на массив

02.11.2015, 14:01. Просмотров 513. Ответов 6
Метки нет (Все метки)

У меня есть DLL которая записывает массив в файл
Для этого ей нужно передать указатель на этот масив, с масивом все нормально
C++
1
float *mas;
Далее выделение памяти под масив
C++
1
write_tabl__float32("LOG_DB",0, pole, mas, 1);
В чем проблема, когда я передаю указатель на массив он описан в функции как FLOAT
А если мне надо записать не массив а структуру или класс, размер который известен
C++
1
2
3
4
struct log
{
........
};
sizeof(log) - собственно его размер

Выдается ошибка в строке
write_tabl__float32("LOG_DB",0, pole, log, 1);
94 47 D:\base_dll\test\main.cpp [Error] cannot convert 'log' to 'float*' in argument passing

У меня вопрос, можно ли передавать указатель без описания его типа (при массиве я тип указываю)
В случае как с массивом так и с классом размер известен, проблема в передаче указателя на начало данных в случае с массивом тип данных описан в функции (write_tabl__float32), описать тип структрукты я незнаю как, но поидее указатель на нее - log но система требует тип.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2015, 14:01
Ответы с готовыми решениями:

Передать в DLL указатель на класс
В основной программе хочю сделать чтото типа class fprognoz { public: ...

Как передать массив через указатель?
Народ, такая проблема: при передаче в функцию массива через указатель, вся...

Как правильно передать массив через указатель?
#pragma once #include <vector> class TOMathModel { public:...

Как правильно передать в функцию указатель на двумерный массив?
Сабж #include <windows.h> #include <stdio.h> using namespace std; //ОТ...

Указатель на массив указателей на объекты, передать в метод объекта
Здравствуйте! Нужно решить задачу, есть такой класс. class MyClsDisk ...

6
zss
Модератор
Эксперт С++
7410 / 6800 / 4302
Регистрация: 18.12.2011
Сообщений: 17,967
Завершенные тесты: 1
02.11.2015, 14:09 2
Можно передавать указатель типа void, а потом приводить его к нужному типу.
Или "нагло" приводить к нужному
C++
1
write_tabl__float32("LOG_DB",0, pole, reinterpret_cast<float*>(&log), 1);
1
sfinexer
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 172
02.11.2015, 14:15  [ТС] 3
zss, спасибо.
Есть всеже вопрос, у меня так сделано что длина массива и его указатель сами по себе.
В случае со структурой, также. Но в структуре, в отличие от массива, у меня могут быть разные типы данных.

Или посоветуете везде в функциях переописать тип указателя на void?
0
zss
Модератор
Эксперт С++
7410 / 6800 / 4302
Регистрация: 18.12.2011
Сообщений: 17,967
Завершенные тесты: 1
02.11.2015, 14:20 4
Если заранее неизвестен тип того, что передается, то принято писать *void
1
sfinexer
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 172
02.11.2015, 14:28  [ТС] 5
zss,
Неполучается тогда
в мейне

C++
1
  write_tabl__float32 = (int (__stdcall*)(string NameT, unsigned __int64 N, string pole[100], void *mas, int koll))GetProcAddress(hDLL1, "write_tabl__float32");
выше описание
C++
1
int (__stdcall *write_tabl__float32)(string NameT, unsigned __int64 N, string pole[100], void *mas, int koll);
И на нее ошибка, как бы этот void не переставлять или оставлять один
0
zss
Модератор
Эксперт С++
7410 / 6800 / 4302
Регистрация: 18.12.2011
Сообщений: 17,967
Завершенные тесты: 1
02.11.2015, 14:40 6
если это определение адреса функции, то, мне кажется, надо написать только
C++
1
write_tabl__float32 =GetProcAddress(hDLL1, "write_tabl__float32");
0
sfinexer
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 172
02.11.2015, 15:13  [ТС] 7
Цитата Сообщение от zss Посмотреть сообщение
write_tabl__float32 =GetProcAddress(hDLL1, "write_tabl__float32");
Не тут ругается что неопределено что в нее передается.
Вот так
Цитата Сообщение от zss Посмотреть сообщение
1
write_tabl__float32("LOG_DB",0, pole, reinterpret_cast<float*>(&log), 1);
Проверил работает.

Вопрос всеже остался, в классе разные типы втомчисле и интежер, если я всегда его к флоату приводить буду то структурно это не повлияет?
Ведь я всегда знаю сколько (по длиннне) мне надо записать или прочитать.

Добавлено через 3 минуты
Потомучто в принципе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class log
{
  public:
    int     diller; 
};
class log1
{
  public:
    int     diller; 
};
 
 
  log.diller=26;
  write_tabl__float32("LOG_DB",1, pole, reinterpret_cast<float*>(&log), 1);
  read_tabl__float32("LOG_DB",1, pole, reinterpret_cast<float*>(&log1), 1);
  cout<<log1.diller;
Работает... Но типы приводим к флоату.
0
02.11.2015, 15:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2015, 15:13

Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
Ребята, скажите пожалуйста, как реализовать такую идею? Необходимо передать в...

Передать в неуправляемую функцию указатель на указатель
Неуправляемая функция типа FUNC(int ** r); Делаю так fixed (int* ptr = arr)...

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru