Тема: dll form C# in C++
Показать сообщение отдельно
Старый 12.03.2008, 18:39   #3
k0t_
Пользователь
 
Пол:Мужской
Регистрация: 27.02.2008
Адрес: Днепропетровск, Украина
Сообщений: 149
Репутация: 802
По умолчанию Ответ: dll form C# in C++

Цитата:
Сообщение от tr1ton Посмотреть сообщение
можно ли создать библиотеку 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. Динамически могут быть загружены все длл функции которых отвечают правилам, статически - не всегда.
k0t_ вне форума
 
Ответить с цитированием Вверх
 
Время генерации страницы 0.02983 секунды с 10 запросами