Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 4

dll VC++ 6.0 -> VC++ 2008

14.07.2010, 01:11. Показов 1417. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как-то написал dll(математика из диф.геометрии) на С++ 6.0, все работало, но теперь надо под 64-битную винду перетащить и есть проблема - сама dll работает, если в установках компилятора поставить 32-разрядный проц.
переписал в виде класса на C++ 2008, но в старой версии передавал ссылки на массивы в виде
C++
1
2
3
4
5
6
7
8
EXPORT int CALLBACK AAA(double *pF , double *pA)
{
int Qty= INT(*pF++); 
double A = *pF++; 
double B = *pF++; 
double C = *pF++; 
double D = *pF++; 
.............}
если пишу так
C++
1
2
3
4
5
6
7
8
public ref class Match
{
public:
double AAA(double *pF , double *pX, double *pY);
double BBB(double pF , double pX, double pY);
 
......................
}
то потом из VB AAA метод не видно..., хотя второй BBB доступен
----------------------------------------------------------------------------
как в 2008 С++ передать ссылку на массив как параметр функции?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2010, 01:11
Ответы с готовыми решениями:

Вызываю dll (написанную на vc++2008) из Fasm. Через 40 секунд вылет из программы.Без вызова dll из Fasm программа не вылетает.
Программа на vc++2008: #include "MathFuncsDll.h" #include <stdexcept> using namespace std; namespace MathFuncs { ...

Подключить DLL в проект MSVS 2008
Сгенерировал для OpenGL32.dll DEF файл Borland-овской утилитой impdef, потом VS-шой утилитой lib сгенерировал import library, добавил в...

Error ntwdblib.dll - MSSQLSERVER 2008 R2
Sql Server 2008 R2 Express Edition 10.52.4000.0 x64 После инсталляции софта в папке C:\Windows\System32 файла ntwdblib.dll не было... ...

6
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
14.07.2010, 08:53
Вот пример рабочей DLL
dll.h
C++
1
2
3
4
extern "C" __declspec(dllexport)int** Razn(int**, short, short, int**, short, short);
extern "C" __declspec(dllexport)int** Sum(int**, short, short, int**, short, short);
extern "C" __declspec(dllexport)int** Input(short, short);
extern "C" __declspec(dllexport)void Output(int**, short, short);
dll.cpp
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "dll.h"
#include <windows.h>
#include <iostream>
 
#ifdef _MANAGED
#pragma managed(push, off)
#endif
 
int** Razn(int** matr1, short m1n, short m1m, int** matr2, short m2n, short m2m)
{
    setlocale(LC_ALL, "Russian");
    if(m1n != m2n || m1m != m2m)
    {    
        std::cout<<"Матрицы не совместны!"<<std::endl;
        return 0;
    }
    short i, j;
    int **matr = new int*[m1n];
    for(i = 0; i < m1n; ++i)
        matr[i] = new int[m1m];
    for(i = 0; i < m1n; ++i)
        for(j = 0; j < m1m; ++j)
            matr[i][j] = matr1[i][j] - matr2[i][j];
    return matr;
}
 
int** Sum(int** matr1, short m1n, short m1m, int** matr2, short m2n, short m2m)
{
    setlocale(LC_ALL, "Russian");
    if(m1n != m2n || m1m != m2m)
    {    
        std::cout<<"Матрицы не совместны!"<<std::endl;
        return 0;
    }
    short i, j;
    int **matr = new int*[m1n];
    for(i = 0; i < m1n; ++i)
        matr[i] = new int[m1m];
    for(i = 0; i < m1n; ++i)
        for(j = 0; j < m1m; ++j)
            matr[i][j] = matr1[i][j] + matr2[i][j];
    return matr;
}
 
int** Input(short n, short m)
{
    setlocale(LC_ALL, "Russian");
    short i, j;
    int** matr = new int*[n];
    std::cout<<"\nВведите матрицу размерностью "<<n<<"x"<<m<<":\n";
    for(i = 0; i < n; ++i)
    {   
        matr[i] = new int[m];
        for(j = 0; j < m; ++j)
            std::cin>>matr[i][j];
    }
    return matr;
}
 
void Output(int** matr, short n, short m)
{
    short i, j;
    for(i = 0; i < n; ++i, std::cout<<std::endl)
        for(j = 0; j < m; ++j)
            std::cout<<matr[i][j]<<' ';
}
 
#ifdef _MANAGED
#pragma managed(pop)
#endif
Главная программа
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
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <windows.h>
 
typedef int** (*_Razn)(int**, short, short, int**, short, short);
typedef int** (*_Sum)(int**, short, short, int**, short, short);
typedef void (*_Out)(int**, short, short);
typedef int** (*_Inp)(short, short);
_Razn Razn;
_Sum Sum;
_Out Output;
_Inp Input;
HMODULE hM;
 
int Load()
{
    hM = LoadLibrary(L"dll.dll");
    Razn = (_Razn)GetProcAddress(hM, "Razn");
    Sum = (_Sum)GetProcAddress(hM, "Sum");
    Output = (_Out)GetProcAddress(hM, "Output");
    Input = (_Inp)GetProcAddress(hM, "Input");
    return (hM && Razn && Sum && Output && Input);
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    if(!Load())
    {
        std::cout<<"dll.dll не найден или невозможно\nобратится к некоторому содержимому библиотеки\n";
        system("pause");
        return 0;
    }
    short n1, m1, n2, m2;
    std::cout<<"Введите размерность первой матрицы:\nКоличество строк\n> ", std::cin>>n1;
    std::cout<<"Количество столбцов\n> ", std::cin>>m1;
    std::cout<<"\nВведите размерность второй матрицы:\nКоличество строк\n> ", std::cin>>n2;
    std::cout<<"Количество столбцов\n> ", std::cin>>m2;
 
    int** matr1 = Input(n1, m1);
    int** matr2 = Input(n2, m2);
    system("cls");
    std::cout<<"Первая матрица:\n", Output(matr1, n1, m1);
    std::cout<<"\nВторая матрица:\n", Output(matr2, n2, m2);
 
    std::cout<<"\nРезультат:\n";
    int** matrR = Razn(matr1, n1, m1, matr2, n2, m2);
    if(matrR)
    {
        int** matrS = Sum(matr1, n1, m1, matr2, n2, m2);    
        std::cout<<"Разность матриц:\n",Output(matrR, n1, m1);
        std::cout<<"\nСумма матриц:\n",Output(matrS, n1, m1);
    }
    FreeLibrary(hM);
    std::cout<<std::endl;
    system("pause");
    return EXIT_SUCCESS;
}
0
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 4
14.07.2010, 11:25  [ТС]
[QUOTE=M128K145;856139]Вот пример рабочей DLL
dll.h
C++
1
2
3
4
extern "C" __declspec(dllexport)int** Razn(int**, short, short, int**, short, short);
extern "C" __declspec(dllexport)int** Sum(int**, short, short, int**, short, short);
extern "C" __declspec(dllexport)int** Input(short, short);
extern "C" __declspec(dllexport)void Output(int**, short, short);
------------------------------------------------------------------------------------------------
написал класс на C++ - обращение к нему через референс доступных проектов решения. вызываю метод класса из VB.NET типа
dim mm as new clsMath.MMM
mm.FFF(A(1),B(1),C(1))
---------------------------------
в h файле

C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
using namespace System;
namespace DDDDDDD{
int rezrev1; 
int flag = 0; int flag2 = 0; int count=0; int count1 = 0; double presition = 0.0000001;
double rez1, rez2, rez3, rez4, rez5, rez6, rez7, rez8;
    public ref class MMM
    {
        public:
            
  double FFF(double  *pF , double *pX, double *pY);
---------------------------------------------------------------------------
когда в объявление метода добавляю указатель на массив - метод становится не видимым.
среда - MS VS2008, win7-64
....................................
при создании проекта dll надо указывать win32... а позднее проблема в том, что для целого проекта надо ставить проц32 - а мне и под 64разрядный проц надо dll прицепить
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
14.07.2010, 13:42
Igor Rubas, .NET увидел, но вот я не нашел признаков VisualBasic.NET и управляемых указателей
0
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 4
14.07.2010, 15:08  [ТС]
указатель в С++
double FFF(double *pF , double *pX, double *pY);
а признаки VB.NET отсутствуют - вопрос не их касался :-)
а ссылка на массив в моем случае передается в виде
класс Array

double Class1::Add(array<double>^myArr )
{
.......................
.......................
.......................
}
задача решена, спасибо за участие :-)
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.07.2010, 00:45
Цитата Сообщение от Igor Rubas Посмотреть сообщение
C++
1
array<double> ^myArr
Вот это собственно и называется управляемым указателем
0
0 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 4
15.07.2010, 03:05  [ТС]
просто чаще MSDN читать надо :-) и все будет хорошо. про переход с одной редакции С++ на другую очень хорошо написано здесь http://msdn.microsoft.com/en-u... S.80).aspx
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2010, 03:05
Помогаю со студенческими работами здесь

Как собрать DLL с настройкой _WinDLL в VisualC++ 2008
Доброго времени суток! Подскажите новичку: Есть программа, для работы которой пользователь должен написать свою DLL. В описании...

Не могу вызвать функцию из dll С++ в С# в системе Win 7 64bit, MSVS 2008
Здравствуйте! Уже два дня не могу вызвать функцию из dll C++ в программе, написанная в C#. Программа пишется в MS VS 2008 Win 7 64bit. ...

VC++ 2008 как изменить свойства компиляции чтобы из exe была сделана dll?
Как сделать dll я знаю. А вот как пример (работающий) который компилиться как exe сделать dll? Кто знает подскажите пожалуйста.

После компиляции dll в vc++ 2008 имя функции вот такое ?Add@MyMathFuncs@MathFuncs@@SAJJ@Z. Почему?
Я ожидал имя в dll Add@MyMathFuncs@MathFuncs Но не такое ?Add@MyMathFuncs@MathFuncs@@SAJJ@Z Вот код mydll.h и mydll.cpp: in...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru