![]() |
|
|
![]()
|
|
| RussianHero |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Всем привет 8)
В общем, облазил весь гугл, так ничего путного и не нашел.. сам уже тоже замучался искать, вот, обращаюсь за помощью: Создал как-то dll-ку, как написано на ферстстепс.ру - все отлично работает.. но там она банальная, и мне этого хватала, я получал строку, в дллке обрабатывал и отсылал обратно. Делал это вообще смешно, без использования визарда для МФЦ и длл, а вот так вот: файл Х.h
файл Х.def
файл X.cpp
Дальше этого перестало хватать... В том плане, что теперь мне необходимо, чтобы, во время обработки получаемой строки, при выполнении условия было то-то, а при несоблюдении мне нужно вызвать диалоговое окно, в котором будет таблица, содержащая результаты обработки и т.п. На нормальном проекте (.ехе) я все отработал, и работу с CListCtrl и все-все-все... Так что код уеня уже готовый есть. Все что мне необходимо каким-то образом добавить в ресурс файл (создать новый точнее) диалог. и организовать его вывод, при несоблюдении моего условия. дальше уж я найду его инициализацию и т.п. и добавлю туда мой код. Вы не представляете какой это геморрой.. Надеюсь на вашу помощь. А если еще и скажете, как сделать норм длл( с помощью визарда, а не с помощью .def), то вообще буду радоваться как младенец 8) Заранее благодарю. |
||||||
|
|||||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
читать там
http://www.codersource.net/mfc_dll_tutorial.html и там: http://www.codeguru.com/cpp/cpp/cpp_mfc/tu...ticle.php/c4017 и вообще, если разделять логику и вид, то по хорошему зачем в считающем коде "окна" ? возвращайте ошибку из кода длл, и показывайте результаты в основной программе имхо.. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Я делал подобную штуку. Вот тема. Если будут вопросы, постараюсь помочь.
|
|||
|
||||
| RussianHero |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Спасибо за ссылки, изучил..много чего узнал, но вот какая незадача - набил пример прямо из первой ссылки:
Create an MFC AppWizard Dll. Choose the option of Regular MFC DLL - Dynamically Linked to MFC. After the application gets created, add a header file and a source file to the application. The article assumes the file names to be utilities.h, utilities.cpp. Enter a function declaration inside the header file utilities.h with the following syntax.
Add the function definition inside the utilities.cpp file as follows. --------------------------------------------------------------------------------
Compile the MFC DLL application. This will produce a ProjectName.lib and ProjectName.dll in the debug folder. These two files are enough for using inside an application. И он не работает.. выдает ошибку: Error Message fatal error C1010: unexpected end of file while looking for precompiled header directive и указывает это на конец цппшного файла на закрывающуюся скобку... На что в МСДН сказано: Did you forget to add '#include name' to your source? Они че, издеваются? 8) Карчое, так ДЛЛ не смог собрать 8( как сказано в первой ссылке ПОтом зашел на вторую ссыль.. там побольше.. я чего-то поколдовал, потом понял, в чем я ступил идобавил в цппшный файл строчку #include "stdafx.h" Все стало компилироваться 8) собралось ДЛЛ... тока вот не пашет ничего... Объясняю: у меня програмулька, которая использует ВБА для скриптинга... в ней я делаю вот что:
и после создания ДЛЛ выше указанным образом стала выдавать ошибку, что функция ААА не найдена... Вот содержание cpp: #include "stdafx.h" void ААА(CString str) { ... } Вот содержание h файла: __declspec(dllexport) void AAA(CString str); Правильно ли я все сделал? Создал МФЦ ДЛЛ проект с помощью визарда. Потом добавил по пустому файлу cpp и h (напимер bbb.cpp и bbb.h) в этот проект. Содержание их изложил выше... В cpp файл самого проекта (кот создался по умолчанию визардом) добавил #include "BBB.h" Всё! Люди добрые, скажите, почему функция не видится... 2jonie: в считающем коде окно потому, что при обработке может возникнуть массив, который я не хочу передавать в программу, а хочу сразу вывести и предложить выбрать пользователю что-то из него и на основе этого выбора - продолжить работу функции... так что окно мне тут просто необходимо. 2voov: Ну так если делал подобную штуку, помоги 8) Я уже с ума схожу. |
||||||
|
|||||||
| RussianHero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Люди, ну помогите хоть кто-нибудь.. неужели никто не делал длл и не вызывал из нее функциб в ВБА или где-то еще...?
|
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: нет Всего: 3 |
2 RussianHero:
По идее, достаточно просто убедиться, что библиотека регистрирует класс окна (например, в DllMain) а потом создавать окна этого класса через CreateWindow. Но это только в том случае, если не нужна MFC-я обертка окна. Если нужна, придется экспортировать класс через __declspec(dllexport/dllimport) |
|||
|
||||
| voov |
|
||||||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
Про ВБА ничего сказать не могу, а почему функция не видится предположение есть.
Из дллки ты ее экспортируешь
а в проге, которая использует длл, не импортируешь функцию
Добавлено через 3 минуты и 48 секунд
Я же ссылку дал. Есть вопросы - задавай. |
||||||
|
|||||||
| RussianHero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Kallikanzarid, в том-то все и дело, что мне МФЦ нуженЮ, так как как я уже сказал - у меня уже все гвотово в экзешнике.. мне надо тока это перенести в ДЛЛку... а в экзешнике и CString и CDialog и CListCtrl...
voov, ой, я как-то проглядел ссылку вашу 8) Сейчас гляну... ПО поводу "а в проге, которая использует длл, не импортируешь функцию" В проге где я это использую - а это ВБА(можете сам открыть эксель и создать макрос) не нужно ничего импортировать.. ВБА очень и очень дружелюбен.. все, что надо там сделать - это Declare Sub ААА Lib "ХХХ.dll" (ByVal stroka As String) AAA ("Привет!") и все, все будет работать... 8) Добавлено через 12 минут и 59 секунд voov, Прочел тот топик, который Вы указали... Спасибо, информативно на счет окна.. тока я пытаюсь пока что разобраться как сделать просто дллку, хоть какую-то, чтобы видна была в ВБА 8) И разобрался-таки!!! Пригляделся, что в проекте визардом создался еще и def файл, в которм: ; AAA.def : Declares the module parameters for the DLL. LIBRARY "AAA" DESCRIPTION AAA Windows Dynamic Link Library' EXPORTS ; Explicit exports can go here Не долго думая, сделал то, что они хотят.. засунул сюда непонятный код из моей прошлой ДЛЛки: ; AAA.def EXPORTS AAA @1 И, о чудо! Никаких пятен!!! Функция стала видна и вызывается из ВБА!!! Елки палки-то.. почему нигде нельзя взять, что же это за (извиняюсь) хрень... какая-то @1 ...!!! и то, просто пока что вызвал функцию.. начала запускаться, но в конце ошибку выдала.. сейчас буду разбираться в чем дело... |
|||
|
||||
| RussianHero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Люди, гугл действительно творит чудеса:
http://www.vbstreets.ru/Projects/Graphics/66394.aspx не считая первых двух абзацев здесь как раз сообщается как создавать ДЛЛки с экспортируемыми фунциями для работы в других приложениях!!!! |
|||
|
||||
| RussianHero |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Такс, ну вроде бы с посмтроением ДЛ разобрались 8)
теперь к главной теме: открываю ResourseView и делаю insert->Dialog называю его IDD_RESULTDIALOG в файле Resourse.h появляется строка
в моей функции пишу:
при компиляции вот такая вот ошибка: error C2065: 'IDD_RESULTDIALOG' : undeclared identifier В чем дело?? В обычном экзешном проекте я так стоздавал окна... Добавлено через 13 минут и 1 секунду Сделал так: #include "Resource.h" // Идентификаторы ресурсов скомпилировалось без ошибок, а вот как начинаю билдить - то 81 ошибка и 82 еррора... 8( Что ж не так-то??? |
||||
|
|||||
| RussianHero |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
Понял в чем дело, почитал
http://support.microsoft.com/default.aspx?...b;EN-US;Q148652 ... просто сделал билд - релиз, а не дебаг - все нормально... Тока вот
как-то проскакивает.. ничего не создает..... Есть идеи? Добавлено через 9 минут и 52 секунды Сделал сейчас вот как:
сказало: Error Creating Dialog Object Почему??? |
||||
|
|||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
вопрос тоже был в моей теме. смотри здесь и следующие 2 поста. |
|||
|
||||
| RussianHero |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 14.8.2007 Где: г. Балашиха, МО Репутация: нет Всего: нет |
voov, я конечно еще раз посмотрю(в понедельник-вторник) на счет того, что я сказал визарду, но вроде бы все верно...
"Создал класс для этого диалога CGraphRTDlg." - видите ли, дело в том, что у Вас тут целый класс отдельный для этого окна, а у меня вообще нету ничего кроме пустого, создающегося по умолчанию, диалог бокса. Мне не нужен особый класс для этого, меня CDialog вполне устраивает. Все, что мне нужно, чтобы он по стандарту отрисовал мне мой IDD_RESULTDIALOG. То биш вот такиз вот конструкций :
у меня нет. Все, что у меня есть -
и я не понимаю, почему это не работает и почему вот тут вот:
не создается указатель. Но гвоорю, посмотрю еще на всякий случай, что я сказал визарду... |
||||||
|
|||||||
| KEHT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 17.7.2006 Репутация: 1 Всего: 1 |
Почему бы вам не использовать Automation? Это сообщение отредактировал(а) KEHT - 23.11.2008, 18:18 |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
RussianHero, а какого типа проект ты создал для длл? И какие настройки проекта, который использует длл? Как подключается МФЦ, статически или динамически?
Если можешь, выложи проект, посмотрим. Интересно стало. Поидее должно работать. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |