Статус:
Offline
Реєстрація: 04.03.2009
Повідом.: 20
Реєстрація: 04.03.2009
Повідом.: 20
Project - > Add Reference - > Browse - указываешь путь к dll
+1
а потом вызываеш ту функцию которая у тебя в длл описана
Давно я уже не писал на C++... описанный способ действительно работает для обычного, unmanaged проекта? И как именно работает? Шо-то я совсем подзабыл, какие есть способы заюзать DLLку более человеческие, чем LoadLibrary/GetProcAddress
(c) Джеффри Рихтер "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"Собирая исполняемый модуль, который импортирует функции и переменные из DLL, Вы должны сначала создать эту DLL А для этого нужно следующее.
Прежде всего Вы должны подготовить заголовочный файл с прототипами функций, структурами и идентификаторами, экспортируемыми из DLL. Этот файл включается в исходный код всех модулей Вашей DLL. Как Вы потом увидите, этот же файл понадобится и при сборке исполняемого модуля (или модулей), который использует функции и переменные из Вашей DLL
Вы пишете на С/С++ модуль (или модули) исходного кода с телами функций и определениями переменных, которые должны находиться в DLL. Так как эти модули исходного кода не нужны для сборки исполняемого модуля, они могут остаться коммерческой тайной компании-разработчика.
Компилятор преобразует исходный код модулей DLL в OBJ-файлы (по одному на каждый модуль).
Компоновщик собирает все OBJ-модули в единый загрузочный DLL-модуль, в который в конечном итоге помещаются двоичный код и переменные (глобальные и статические), относящиеся к данной DLL Этот файл потребуется при компиляции исполняемого модуля
Если компоновщик обнаружит, что DLL экспортирует хотя бы одну переменную или функцию, то создаст и LIB-файл Этот файл совсем крошечный, поскольку в нем нет ничего, кроме еписка символьных имен функций и переменных, экспортируемых из DLL Этот LIB-файл тоже понадобится при компиляции ЕХЕ-файла.
Создав DLL, можно перейти к сборке исполняемого модуля.
Во все модули исходного кода, где есть ссылки на внешние функции, переменные, структуры данных или идентификаторы, надо включить заголовочный файл, предоставленный разработчиком DLL.
Вы пишете на С/С++ модуль (или модули) исходного кода с телами функций и определениями переменных, которые должны находиться в ЕХЕ-файле. Естественно, ничто не мешает Вам ссылаться на функции и псрсмснные, определенные в заголовочном файле DLL-модуля
Компилятор преобразует исходный код модулей EXE в OBJ-файлы (по одному на каждый модуль).
Компоновщик собирает все OBJ-модули в единый загрузочный ЕХЕ-модуль, в который в конечном итоге помещаются двоичный код и переменные (глобальные и статические), относящиеся к данному EXE. В нем также создается раздел импорта, где перечисляются имена всех необходимых DLL-модулей (информацию о разделах см в главе 17) Кроме того, для каждой DLL в этом разделе указывается, па какие символьные имена функций и переменных ссылается двоичный код исполняемого файла. Эти сведения потребуются загрузчику операционной системы, а как именно он ими пользуется — мы узнаем чуть позже.
Создав DLL- и ЕХЕ-модули, приложение можно запустить. При его запуске загрузчик операционной системы выполняет следующие операции
Загрузчик операционной системы создает виртуальное адресное пространство для нового процесса и проецирует па пего исполняемый модуль.
Далее загрузчик анализирует раздел импорта, находит все необходимые DLLмодули и тоже проецирует на адресное пространство процесса. Заметьте, что DLL может импортировать функции и переменные их другой DLL, а значит, у нее может быть собственный раздел импорта. Заканчивая подготовку процесса к работе, загрузчик просматривает раздел импорта каждого модуля и проецирует все требуемые DLL-модули на адресное пространство этого процесса. Как видите, на инициализацию процесса может уйти довольно длительное время.
Если б так просто.
Необходим пример кода, или ссылка на пример кода в котором подключается dll в проект. В гугле меня не банили, но он даёт ссылки в большей мере на отрывки какието.
Компоновщик собирает все OBJ-модули в единый загрузочный ЕХЕ-модуль, в который в конечном итоге помещаются двоичный код и переменные (глобальные и статические), относящиеся к данному EXE. В нем также создается раздел импорта, где перечисляются имена всех необходимых DLL-модулей (информацию о разделах см в главе 17) Кроме того, для каждой DLL в этом разделе указывается, па какие символьные имена функций и переменных ссылается двоичный код исполняемого файла.
/ File funlib.h
#define EXPORT extern "C" __declspec(dllexport)
EXPORT BOOL CALLBACK return333();
EXPORT int CALLBACK MyInc(int i);
//funlib.cpp
#include <windows.h>
#include <string.h>
#include "fulib.h"
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE;
}
EXPORT BOOL CALLBACK EdrCenterText()
{
return 333;
}
EXPORT int CALLBACK MyInc(int i)
{
return ++i;
}
// usedll.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "iostream.h"
#include "funlib.h"
int main(int argc, char* argv[])
{
cout<<return333()<<endl;
cout<<MyInc(5)<<endl;
return 0;
}
#include "stdafx.h"
#include "iostream.h"
#include "windows.h"
HINSTANCE hL;
typedef int (CALLBACK * Inc)(int i);
Inc pI;
int main(int argc, char* argv[])
{ hL=LoadLibrary("1111.dll");
pI=(Inc)GetProcAddress(hL,(LPCSTR)2);
cout<<pI(6);
FreeLibrary(hL);
return 0;
}