C++ DLL библиотеки

456
09 ноября 2017, 06:24

Всем здравствуйте. Недавно я решил создать собственную динамически подключаемую библиотеку или иными словами dll. Я пока таким не занимался. Мое задание заключается в том, что я ввожу квадратную матрицу и число k. Делю k-ю строку на диагональный элемент этой строки. А потом вывожу исходную и полученную. И для этой задачи мне надо использовать класс и подключать мою библиотеку динамически. Вот моя реализация на visual studio(там при создании проекта я выбрал библиотеку dll). Некоторые вещи при создании dll я смотрел на форуме microsoft.

Компилятор не запускает программу по этой причине: Предупреждение C4273 matrix::matrix::matrix: несовместимая компоновка dll. По мимо этого появляется окно: Не удалось запустить программу. Неподдерживаемая операция. Неизвестная ошибка: 0x800700c1.

Помогите решить проблему. Заранее благодарен.

lib.h

#pragma once
#ifdef MATRIXDLL_EXPORTS
#define MATRIXDLL_API __declspec(dllexport)
#else
#define MATRIXDLL_API __declspec(dllimport)
#endif
#include "stdafx.h"
#include <iostream>
using namespace std;
namespace matrix
{
  class matrix
  {
    int **p, m, n;
public:
    MATRIXDLL_API matrix(int row, int col);
    //    ~matrix()
    //    {
    //       delete [] p;
    //    }
    MATRIXDLL_API void accept();
    MATRIXDLL_API void display();
    MATRIXDLL_API void test();
 };
}

lib.cpp

 #include "stdafx.h"
#include <iostream>
#include "lib.h"
#include <stdexcept>
using namespace std;
namespace matrix
{
  matrix::matrix(int row, int col)
  {
    m = row;
    n = col;
    p = new int*[m];
    for (int i = 0; i < m; ++i)
    {
        p[i] = new int[n];
        for (int j = 0; j < n; ++j)
            p[i][j] = 0;
    }
}
void matrix::accept()
{
    cout << "Enter matrix elements: ";
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> p[i][j];
        }
    }
}
void matrix::display()
{
    cout << "The matrix is:\n";
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << p[i][j] << " ";
        }
        cout << endl;
    }
}
void matrix::test()
{
    int K;
    cout << "Enter k: " << endl;
    cin >> K;
    display();
    int R = p[K - 1][K - 1];
    cout << endl;
    for (int d = 0; d < m; d++)
    {
        p[K - 1][d] = p[K - 1][d] / K;
    }
    display();
 }
}

dllmain.cpp

#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
                   DWORD  ul_reason_for_call,
                   LPVOID lpReserved
                 )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
    break;
}
return TRUE;
}
Answer 1

Всем огромное спасибо!!! Все работает. Забыл, что при подключении библиотеки в проект нужно добавить object file library

READ ALSO
Перенаправление вывода в файл

Перенаправление вывода в файл

Скажите, пожалуйста, как внутри C++ программы можно перенаправить весь вывод в файл?

400
Редактирование кода для массива [требует правки]

Редактирование кода для массива [требует правки]

Не могу исправить ошибкипомогите кто то с кодом,позязязя:3

268
Присвоению массиву другой массив

Присвоению массиву другой массив

Нужно массиву double а[n] присвоить массив double b[n]Как реализовать? Без цикла

298
Сортировка Структуры [требует правки]

Сортировка Структуры [требует правки]

Нужна помощь с сортировкой

302