Форум программистов, компьютерный форум CyberForum.ru

Как по ссылке передать массив из экселя в dll? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ error LNK2019 http://www.cyberforum.ru/cpp-beginners/thread632718.html
проблема вот в чем пишу некий проект, и никак не могу понять почему ошибка вот строка float median(std::vector<float> v); тут и выскакивает ошибка, вот что пишет компилятор: .......................................... 1> Для всех выходных данных обновления не требуется. 1>OpenTLD.obj : error LNK2019: ссылка на неразрешенный внешний символ "float __cdecl median(class std::vector<float,class...
C++ Как сделать один шаблон для разных типов Предположим я реализую некоторый шаблонный класс, в котором, ну ради примера к объектам шаблонного типа (тип, используемый в заголовке шаблона <typename T>) используют операции сложения и вычитания. Понятно, что если я создаю объекты типа objClasss<float> или objClasss<int>, то проблем нет. Понятно, что проблем не будет, если в пользовательском классе (MyClass с последующим objClasss<MyClass>... http://www.cyberforum.ru/cpp-beginners/thread632714.html
C++ Не работает код
Помогите пожалуйста перепробовал уже все компиляторы ... не хочет запускаться данный код ( думал на visual C++ 6.0 все запустится но все безуспешно( #include <iostream.h> int main() { cout << "Hollo World!\n"; return 0; }
rawurlencode() в С++ C++
Привет всем! Надо срочно пару строк закодировать под C++, но никак не могу найти аналог функций rawurlencode() в С++. Может кто-нить знает алгоритм этой кодировки. Если кто-нить сталкивался с таким, подскажите пожалуйста!
C++ Динамическое изменение консольного окна, с избежанием появления полос прокрутки http://www.cyberforum.ru/cpp-beginners/thread632679.html
Здравствуйте, коллеги. Я нуждаюсь в помощи и совете. #include <iostream> #include <windows.h> #include <conio.h> #include <locale> using namespace std; const int WIDTH = 59;
C++ с++ версии выпусков где просмотреть у меня такое дело - хотел с 2010 студии перейти на с++ 6.0 но она виснет странным образом. есть что то поновее чем с++ 6 но без установки дап нет. подробнее

Показать сообщение отдельно
__Дмитрий__
Сообщений: n/a

Как по ссылке передать массив из экселя в dll? - C++

04.08.2012, 12:49. Просмотров 528. Ответов 0
Метки (Все метки)

Добрый день,

Я в основном все примочки к экселю пишу естественно на VBA, но недавно столкнулся с необходимостью ускорить вычисления. Первую пробную функцию написал при помощи XLW (xlw.sourceforge.net), но на больших объёмах данных функция сильно подвисает. Вот она:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <math.h>
#include<cppinterface.h>
#pragma warning (disable : 4996)
 
double STDEVIF(const CellMatrix& Range, std::string Sign, double Number) {
 
    double sum = 0, sq_sum = 0, val;
    unsigned long n = 0;
    bool cond = false;
 
    unsigned long rows = Range.RowsInStructure();
    unsigned long cols = Range.ColumnsInStructure();
 
    for (unsigned long i = 0; i < rows; i++) {
        for (unsigned long j = 0; j < cols; j++) {
            if (Range(i,j).IsANumber()) {
                val = Range(i,j).NumericValue();
                if (Sign.compare("<") == 0) {
                        cond = (val < Number);
                } else if (Sign.compare(">") == 0) {
                        cond = (val > Number);
                } else if (Sign.compare("<=") == 0) {
                        cond = (val <= Number);
                } else if (Sign.compare(">=") == 0) {
                        cond = (val >= Number);
                } else if (Sign.compare("<>") == 0) {
                        cond = (val != Number);
                } else {
                        cond = false;
                }
                if (cond) {
                    sum += val;
                    sq_sum += val * val;
                    n += 1;
                }
            }
        }
    }
 
    if (n > 1) {
        return sqrt((n * sq_sum - sum * sum) / (n * (n - 1)));
    } else {
        throw("ERROR: There are less than 2 numbers matching the criteria.");
    }
}
Сначала я грешил на алгоритм, но потом я на большом объёме данных засёк время исполнения кода C++ и отдельно время обновления формулы в экселе. Оказалось, что передача данных из экселя в dll и обратно заняла 15 секунд, а исполнение кода С++ всего 1.8 секунды. Нашёл пример в интернете, как можно избежать использования тяжёлого XLW и прочих подобных оболочек и передать массив с данными типа Variant в С++ по ссылке. Код приведён тут: http://stackoverflow.com/questions/1...en-vba-and-dll . Но в силу своих слабых познаний я не могу сам совместить свой код с приведённым там, я просто не понимаю что я делаю, когда дело касается вещей вроде TLB, SAFEARRAY и т.д. Буду крайне признателен, если кто-нибуть мне на пальцах объяснит, как мне изменить свой код, чтобы принять массив variant минуя XLW. Мой код сделан под XLL, но меня вполне устроит и DLL, на случай, если это что-то меняет.

Буду благодарен за любую помощь, убил на это уже 3 дня.

Добавлено через 16 часов 18 минут
Опять же если это что-то меняет, то я использую Excel 2010 32 bit и Visual C++ 2008.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru