| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > DLL |
| Автор: nas_alex 24.8.2004, 15:28 |
| помогите !!!!!! VC6 как вызвать ф-цию из DLL, зная имя и параметры? |
| Автор: Олег М 24.8.2004, 16:00 |
| Загружаешь библиотеку ::LoadLibrary Получаешь адрес функции по имени GetProcAddress Преобразовываешь указатель и вызываешь |
| Автор: Конструктор 24.8.2004, 16:06 | ||
Например вызываем ф-цию int SomeFunc(int someparam);
Вроде так. Только надо учесть что компиляторы искажают имена ф-ций в длл в зависимости от параметров. Как с этим бороться я не в курсах, потому юзаю DumpBin. |
| Автор: nas_alex 24.8.2004, 16:20 |
| а можно на примере пояснить? у меня 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) |
| Автор: Олег М 24.8.2004, 16:46 | ||||
А через OLE не судьба? Если не судьба, то сделай примерно так
|
| Автор: nas_alex 24.8.2004, 16:58 |
| а через OLE это как? |
| Автор: Олег М 24.8.2004, 17:12 | ||||
С офисом поставляются СОМ-классы. Видел VBA? Так там всё через них делается. Так же их можно использовать и в С++. В борланде не знаю как цепляется - поищи, где-то видел уже дофига, а в Вижуал студии примерно так
Получаются обычные классы. |
| Автор: nas_alex 24.8.2004, 17:25 | ||||
сделал так, но при запуске выкидывает окно MFC Application - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. это из-за чего и как можно отловить ошибку? |
| Автор: Олег М 25.8.2004, 07:08 | ||||
Значит указатель на функцию как-то не так преобразовываешь - не те параметры, скорее всего. Ты точно так как у меня написал, что-ли? Если да, то зря - у тебя там совсем другая функция: create_doc(file1,file2:string;paramstr:pchar;kod:word); string - это что? Указатель на строку, как в С? Или что-то другое. Если ты сам написал её в бейсике, то наверное надо добавить ByRef. Хотя точно не знаю, да и неточно тоже. pchar - это char, АНСИ, или short, ЮНИКОДЕ? word - это понятно - 2 байта. И вообще, дурью не майся - работай через ОЛЕ (я так понял ты вижул студии работаешь):
|
| Автор: nas_alex 25.8.2004, 07:58 |
| а есть пример проги, которая через OLE, в WORD чего -нибудь кидает? |
| Автор: Олег М 25.8.2004, 10:00 | ||||||
В продолжение того кода - там прога читает что-то из базы данных и закидывает строчки в ворд (по-моему таблицу заполняет, уже созданную из шаблона)
потом, в конце, что-то ещё делает, не помню что
Всё. Соединяй, что я понаписал в свою прогу, подставляй имена какие надо - должно работать. А какие классы - посмотри в Ворде - запиши макрос - он тебе даст почти готовый текст программы - имена те же, чуть-чуть поменяй и переноси смело в Вижуал студию. |
| Автор: nas_alex 25.8.2004, 11:53 |
| а для 2000 WORDа нет? |
| Автор: Олег М 25.8.2004, 12:16 | ||||||
Абсолютно также - для всех Вордов. Только создавать объект надо вот так
или - для офиса ХР
для 2000 наверное будет Word.Application.9 И библиотеку соответственно подключать другую, не MsWord8.OLB, а MSWORD.OLB или что-то другое - посмотри в "C:\Program Files\Microsoft Office\Office10" или 9 |
| Автор: nas_alex 25.8.2004, 13:12 |
| а как заменить строку на что-нибудь? |
| Автор: Олег М 25.8.2004, 13:20 | ||
Открой Ворд Запусти запись макроса, сделай то что тебе нужно и посмотри что он записал - названия функций такие же. Делай по аналогии. Это уже вопросы не по С++ а по VBA. |