![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
помогите !!!!!!
VC6 как вызвать ф-цию из DLL, зная имя и параметры? |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Загружаешь библиотеку ::LoadLibrary
Получаешь адрес функции по имени GetProcAddress Преобразовываешь указатель и вызываешь |
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Например вызываем ф-цию int SomeFunc(int someparam);
Вроде так. Только надо учесть что компиляторы искажают имена ф-ций в длл в зависимости от параметров. Как с этим бороться я не в курсах, потому юзаю DumpBin. |
|||
|
||||
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
а можно на примере пояснить?
у меня DLL для работы с word, правда все описано под bulder... функция называется Procedure create_doc(file1,file2:string;paramstr:pchar;kod:word); // Процедура создание простого документа на основе // подстановки в тексте текстовых строк на место строк-указателей. // file1 - строка, содержащая имя текстового файла-шаблона. // Файл-шаблон - обычный DOC или RTF текст, содержащий обычные текстовые // строки (определяемые программистом), которые используются в качестве // строк-указателей для последующей замены на смысловой текст. // file2 - имя выходного файла. // paramstr - строка, определяющая способ заполнения шаблона текстовой информацией. // Например, если переменная paramstr содержит строку '#1|первая строка|#2|вторая строка', // то выполнение процедуры // create_doc('c:\hablon.rtf','c:\Документ.rtf','#1|первая строка|#2|вторая строка',1); // приведет к замене в тексте "#1" и "#2" на текст "первая строка" и "вторая строка". // kod - способ отображения текста (0,1,2,3) |
|||
|
||||
| Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
А через OLE не судьба? Если не судьба, то сделай примерно так
|
||||
|
|||||
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
а через OLE это как?
|
|||
|
||||
| Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
С офисом поставляются СОМ-классы. Видел VBA? Так там всё через них делается. Так же их можно использовать и в С++. В борланде не знаю как цепляется - поищи, где-то видел уже дофига, а в Вижуал студии примерно так
Получаются обычные классы. |
||||
|
|||||
| nas_alex |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
сделал так, но при запуске выкидывает окно MFC Application - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. это из-за чего и как можно отловить ошибку? |
||||
|
|||||
| Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Значит указатель на функцию как-то не так преобразовываешь - не те параметры, скорее всего. Ты точно так как у меня написал, что-ли? Если да, то зря - у тебя там совсем другая функция: create_doc(file1,file2:string;paramstr:pchar;kod:word); string - это что? Указатель на строку, как в С? Или что-то другое. Если ты сам написал её в бейсике, то наверное надо добавить ByRef. Хотя точно не знаю, да и неточно тоже. pchar - это char, АНСИ, или short, ЮНИКОДЕ? word - это понятно - 2 байта. И вообще, дурью не майся - работай через ОЛЕ (я так понял ты вижул студии работаешь):
|
||||
|
|||||
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
а есть пример проги, которая через OLE, в WORD чего -нибудь кидает?
|
|||
|
||||
| Олег М |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
В продолжение того кода - там прога читает что-то из базы данных и закидывает строчки в ворд (по-моему таблицу заполняет, уже созданную из шаблона)
потом, в конце, что-то ещё делает, не помню что
Всё. Соединяй, что я понаписал в свою прогу, подставляй имена какие надо - должно работать. А какие классы - посмотри в Ворде - запиши макрос - он тебе даст почти готовый текст программы - имена те же, чуть-чуть поменяй и переноси смело в Вижуал студию. |
||||||
|
|||||||
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
а для 2000 WORDа нет?
|
|||
|
||||
| Олег М |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Абсолютно также - для всех Вордов. Только создавать объект надо вот так
или - для офиса ХР
для 2000 наверное будет Word.Application.9 И библиотеку соответственно подключать другую, не MsWord8.OLB, а MSWORD.OLB или что-то другое - посмотри в "C:\Program Files\Microsoft Office\Office10" или 9 |
||||||
|
|||||||
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
а как заменить строку на что-нибудь?
|
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Открой Ворд Запусти запись макроса, сделай то что тебе нужно и посмотри что он записал - названия функций такие же. Делай по аналогии. Это уже вопросы не по С++ а по VBA. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |