Как правильно вызвать DLL
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]
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)???
[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
А причем это к Call TestString(Pos, "D:\Down\CPK\Slovar_Macros\TestString.dll", R, SC)???
TestString - эта программка, которая обработает строковую переменную, полученную из-под Ворда, и вернет уже правильный вариант. Т.е. мне запустить именно TestString. А MessageBeep - это просто я скопировал пример из Help'a Вордовского VB.
Let A = 2
A = 2
В приведенном мною примере из Хелпа, судя по комменту, просто приводится пример, как можно вызывать используя Call и без использования Call.
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, чтобы заменить ею в исходном тексте с
Я начал так:
Public Declare Lib "TestString.dll " (ByVal Pos as String, PD as ..., R, SC...) As ...
Дальше не знаю.... :o
На всякий случай путь к программке - D:\Down\CPK\Slovar_Macros\TestString.dll
Она написана в VisualStudio на VB кажется. Т.е. наверное не ActiveX.
Но кроме дакларирования dll-ки (я написал эту строчку в разделе Declaration), надо же ее еще и вызвать (из самого макроса).
У меня вызывается так:
Call TestString(Pos, "D:\Down\CPK\Slovar_Macros\TestString.dll", R, SC)
Пишет что не определена функция.
Причины:
1. Может быть не так задекларировал
2. Может быть не там
3. Может быть не так пишу вызов подпрограммы
4. Может быть не те версии языков
5. Может быть опечатка.
6. Может быть все сразу. :mad:
(сплошной кисляк) :(