 |
Цитата: |
 |
|
|
|
|
|
|
|
|
|
|
можно ли создать библиотеку DLL на шарпе и использовать ее функции в С++??
Добавлено через 1 минуту
Я начинающий в сях, так что не бейте больно! ;)
|
|
 |
|
 |
|
Можно.
Существует два способа - динамическая загрузка и статическая линковка.
Динамическая загрузка выполняется при помощи функций
LoadLibrary/GetProcAddress, перед этим необходимо объявить указатель на функцию примерно так:
Код:
typedef HWND (__import *pLoadForm)(HWND Handler,const char* connect);
pLoadForm fLoadForm;
HINSTANCE hDll = LoadLibrary("complcomp.dll");
if(!hDll)return;
fLoadForm = (pLoadForm)GetProcAddress(hDll,"_LoadForm");
String temp = WideCharToString(dmMain->adoConnect->ConnectionString);
hWnd = fLoadForm(this->Handle,temp.c_str());
В данном примере вызывается функция из длл LoadForm и ей передается хендл приложения и строка подключения. (Пример написан для С++Билдера - в VisualStudio немного другие макросы импорта, но я думаю разберетесь)
Для статической линковки необходима библиотека экспорта с раширением .lib которая подключается в проект на этапе линковки.
Преимуществом статической линковки является:
1. Загружается сразу при старте приложения - т.е. нет накладных расходов на загрузку
2. Можно использовать объекты из длл
Недостатки -
1. если длл отсутствует - приложение не загрузится
2. Занимает больше памяти- в не зависимости от того используется функции длл или нет.
3. Динамически могут быть загружены все длл функции которых отвечают правилам, статически - не всегда.