Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как правильно вызвать DLL

248
12 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Вот списал такой пример из помощи по VBA в Ворде:
 
Код:
Sub CallMyDll()
    Call MessageBeep(0)    ' Call Windows DLL procedure.
    MessageBeep 0    ' Call again without Call keyword.
End Sub

ПРи отладке оно пишет Sub or Function not Defined. Как я должен был это описать?

А нужная строка выглядит так:
Call TestString(Pos, "D:\Down\CPK\Slovar_Macros\TestString.dll", R, SC)
Т.е. предполагается, что я в макросе загоняю в переменную текст и потом эту переменную передаю dll-ке (благосклонно написали для меня), сравнивает эту строку со словарем и возвращает мне уже нужный вариант, которым я заменяю первоначально найденное в тексте. Т.е. как мне обратиться к такой внешней программе, что бы уже никогда бы :D не просили "определить функцию"?
И вообще, [COLOR="Navy"]можно ли из-под макроса передавать значения переменных для обработки во внешнюю программу и получать обратно уже обработанные данные?[/COLOR]
251
12 сентября 2007 года
SkyMаn
1.7K / / 31.07.2007
MessageBeep - АПИшка. Ее надо объявлять
Public Declare Function MessageBeep Lib "user32" Alias "MessageBeep" (ByVal wType As Long) As Long
и уже тогда использовать.
А причем это к Call TestString(Pos, "D:\Down\CPK\Slovar_Macros\TestString.dll", R, SC)???
251
12 сентября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата:

[LEFT]Sub CallMyDll()
Call MessageBeep(0) ' Call Windows DLL procedure.
MessageBeep 0 ' Call again without Call keyword.
End Sub[/LEFT]


А зачем повторять одно и то же, два раза? Это две идентичных строки, такие как
Let A = 2
A = 2

248
12 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n

А причем это к Call TestString(Pos, "D:\Down\CPK\Slovar_Macros\TestString.dll", R, SC)???


TestString - эта программка, которая обработает строковую переменную, полученную из-под Ворда, и вернет уже правильный вариант. Т.е. мне запустить именно TestString. А MessageBeep - это просто я скопировал пример из Help'a Вордовского VB.

248
12 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
А зачем повторять одно и то же, два раза? Это две идентичных строки, такие как
Let A = 2
A = 2


В приведенном мною примере из Хелпа, судя по комменту, просто приводится пример, как можно вызывать используя Call и без использования Call.

248
12 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
MessageBeep - АПИшка. Ее надо объявлять
Public Declare Function MessageBeep Lib "user32" Alias "MessageBeep" (ByVal wType As Long) As Long


Я эту строку вписал в разделе Declarations. Но все равно говорит, что мол, ф-я не определена.
Но не это главное. Как бы правильно записать параметры для моей вызываемой программки (TestString.dll) исходя из след. пояснений:

[COLOR="Navy"]Call TestString(Pos, PD, R, SC)[/COLOR]
где передаваемые и возвращаемые параметры означают следующее:
[COLOR="Navy"]Pos [/COLOR]– исходная строка слов, разделённых пробелами.
[COLOR="Navy"]D[/COLOR] – массив текстовых строк, являющийся словарём.
[COLOR="Navy"]R [/COLOR]– возвращаемая переменная типа integer, которая принимает одно из трёх допустимых значений:

  • 0 – в случае, если исходная строка Pos полностью совпадает с одной из словарных статей и тогда делать ничего не нужно;
  • 1 – в случае, если в словаре не нашлось подходящей статьи, и поэтому исходная строка Pos должна быть добавлена в словарь;
  • 2 – в случае, если в словаре найдена родственная статья, которая возвращается в переменной SC, чтобы заменить ею в исходном тексте с
троку Pos.

Я начал так:
Public Declare Lib "TestString.dll " (ByVal Pos as String, PD as ..., R, SC...) As ...
Дальше не знаю.... :o

На всякий случай путь к программке - D:\Down\CPK\Slovar_Macros\TestString.dll
251
12 сентября 2007 года
SkyMаn
1.7K / / 31.07.2007
Для начала выясним, ДДЛка - ваша? На чем написана? То есть нативная или эктив-икс?
248
12 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
Для начала выясним, ДДЛка - ваша? На чем написана? То есть нативная или эктив-икс?


Она написана в VisualStudio на VB кажется. Т.е. наверное не ActiveX.

251
12 сентября 2007 года
SkyMаn
1.7K / / 31.07.2007
Вот если на бейсике, то это скорее всего эктив-икс. Уточни. Варианты типа "кажется", "наверное", "помойму" итп не подходят в данном слкчае ибо надо знать конкретно тип ДЛЛ, так как вызов тоже будет другим. Если она нативная, то подключаешь ака Declare Function TestString Lib "TestString.dll (Pos, PD, R, SC) As String (она вообще какой тип возвращает?). Можешь динамически также подключать. А вот если она эктив-иксовая, то в бейсике есть меню Project-References
248
13 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Написана на Vb.Net (а Visual Studio 2005). А возвращать должна строковый параметр. Который я и должен подсатвить в текст на место исходной строки.

Но кроме дакларирования dll-ки (я написал эту строчку в разделе Declaration), надо же ее еще и вызвать (из самого макроса).
У меня вызывается так:
Call TestString(Pos, "D:\Down\CPK\Slovar_Macros\TestString.dll", R, SC)
Пишет что не определена функция.
Причины:
1. Может быть не так задекларировал
2. Может быть не там
3. Может быть не так пишу вызов подпрограммы
4. Может быть не те версии языков
5. Может быть опечатка.
6. Может быть все сразу. :mad:
(сплошной кисляк) :(
251
13 сентября 2007 года
SkyMаn
1.7K / / 31.07.2007
Тогда скорее это:
Цитата:
А вот если она эктив-иксовая, то в бейсике есть меню Project-References

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог