Создание DLL в VC ++ (Visual Studio 2008) - PullRequest
0 голосов
/ 10 января 2012

Пожалуйста, помогите мне в этом, это действительно раздражает, потому что я делаю это впервые и не имею опыта.

Цель: найти факториал числа

. , ШАГ 1: Создание нового проекта типа VC ++ MFC и в шаблонах MFC DLL

ШАГ 2: Затем создайте обычную DLL (с ​​общим доступом к MFC), и я скажу: Да

ШАГ 3: Я создаю файл заголовка (ServerHeader.h) со следующим кодом

_declspec (dllimport) int factorial(int no);

ШАГ 4: Я создаю файл cpp (ServerFactorial.cpp) с кодом

#include "stdafx.h" 
_declspec (dllexport) int factorial(int no)
{


return no == 0 ? 1 : no * factorial(no-1);
}

ШАГ 5: Я строю проект, и все в порядке

ШАГ 6: Я создаю еще один проект Client VC ++ Win32 и в шаблонах консольного приложения Win32 с настройкой приложения в качестве EMPTY PROJECT и создаю новый файл cpp (MainClass.cpp) с кодом

#include "ServerHeader.h"

#include <iostream.h>

void main()
{


int no,i;


cout<<"Enter number";


cin>>no;


i=factorial(n);  // calling the method


cout<<endl<<i;   // printing ans

}

ШАГ 7: Я копирую ServerHeader.h, Server.dll, Server.lib (есть 2 библиотечных файла, один - Object, а другой - Export). Я копирую все 4 с сервера на клиент

ШАГ 8: Щелкните правой кнопкой мыши по проекту клиента, установите общие настройки компоновщика и напишите путь к моему файлу lib, который я скопировал в папку проекта клиента

ШАГ 9: я строю свой проект и получаю

Ошибка 1: фатальная ошибка C1083: Невозможно открыть включаемый файл: 'iostream.h': Нет такого файла или каталога f: \ client \ client \ mainclass.cpp 2 Клиент

Извините за такой длинный пост.

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Это должно быть #include <iostream>, тогда вам нужно включить пространство имен, std::cout или включить оператор using namespace std в ваш код.

1 голос
/ 12 января 2012

Если вы хотите использовать разделяемую библиотеку (dll), вы не можете напрямую вызывать factorial.Вы должны загрузить dll с помощью LoadLibrary, использовать полученный дескриптор и имя функции при вызове GetProcAddress и вызвать возвращенный указатель на функцию.Чтобы иметь возможность загружать функцию по имени, вы должны объявить ее в dll со спецификатором extern "C", чтобы ее имя было экспортировано без декорации.Альтернативой может быть добавление файла .def в проект dll и использование GetProcAddress с порядковым номером.Я надеюсь, что эти общие указания помогут вам.

...