Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Передать ссылку на функцию? Добавлено: 31.10.08 00:04  

Автор вопроса:  Nytrogen

Ответить

  Ответы Всего ответов: 25  

Номер ответа: 16
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #16
Добавлено: 31.10.08 14:11
Nytrogen, я чё то не пойму зачем тебе API?
невозможно вызвать функцию по её адресу, которая возвращает, например, String?

  1. Private Sub Command1_Click()
  2. a = CallByName(Me, "MyUCase", VbMethod, "text")
  3. MsgBox a
  4. End Sub
  5.  
  6. Public Function MyUcase(Arg)
  7. MyUcase = UCase(Arg)
  8. End Function

Ответить

Номер ответа: 17
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #17 Добавлено: 31.10.08 14:24
Да я и не настаиваю на API :). Хм... я вызываю функцию из модуля класса, а сама функция расположена в обычном модуле.
The name of the object on which the function will be executed как бы отсутствует (Me не подойдёт)

Ответить

Номер ответа: 18
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #18
Добавлено: 31.10.08 16:06
получается, что невозможно вызвать функцию по её адресу, которая возвращает, например, String?

Возможно очень даже. AddressOf получает указатель на функцию. Какой VB-тип данных бы ни возвращала функция, в действительности она возвращает результат в одном DWORD (машинный тип данных в 32 бит), а типы данных по размеру более чем 32 бит передаются указателем на некую структуру или буфер, как например строка BSTR.

Но ты похоже начал запутываться, т.к. твою задачу можно было бы решить и более доступными средствами VB6. Если честно, я в твой типик сильно не вникал, но может просто экземплярам класса задавать формулу расчета через свойства класса, а вычислять - методом. Например класс ADODB.Connection может задавать свойство .ConnectionString с набором команд по подключению к базе данных в одной строке, а осуществлять подключение через метод .Open (в нем также можно указывать свойство ConnectionString и другие, а можно и ничего не указывать).

Ответить

Номер ответа: 19
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #19 Добавлено: 31.10.08 16:32
Дело в том, что эта самая формула написана на родном VB, поэтому строку или функцию надо как-то выполнять.

Ответить

Номер ответа: 20
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #20
Добавлено: 31.10.08 18:10
Scripting тебе в помощь. Всех деталей я не знаю, просто скажем в VBScript/JScript/JavaScript есть такая возможность вычислять выражения типа "=100+200*2-(1.3-0.34)^3", это как-то можно выполнить подключив какую-то библиотеку и использовать это у себя в программе. Переменные в выражении само собой работать не будут!

Ответить

Номер ответа: 21
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #21 Добавлено: 31.10.08 18:25
Спасибо, я такой вариант уже рассматривал. Но мне подходит и передача функции по ссылке через AddressOf.
Вот только я так и не понял, как засунуть строку в Long. :(

Ответить

Номер ответа: 22
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #22
Добавлено: 31.10.08 18:37
Переменные в выражении само собой работать не будут!

- спорный вопрос :)

  1. Private Sub Command1_Click()
  2. Dim vbs As ScriptControl, code As String, result As Long, A As Long, B As Long
  3. Set vbs = New ScriptControl
  4. code = "Function Sum(A, B)" + vbCrLf + _
  5.        "    Sum = A + B   " + vbCrLf + _
  6.        "End Function      "
  7. vbs.Language = "VBScript"
  8. vbs.AddCode code
  9. A = 1: B = 2
  10. result = vbs.Run("Sum", A, B)
  11. MsgBox CStr(result)
  12. End Sub

Ответить

Номер ответа: 23
Автор ответа:
 Holsten



Вопросов: 5
Ответов: 100
 Профиль | | #23 Добавлено: 31.10.08 19:36
Вот только я так и не понял, как засунуть строку в Long.

Получить адрес строки через StrPtr() и передать его в качестве параметра.

Ответить

Номер ответа: 24
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #24 Добавлено: 31.10.08 19:45
Спасибо!

Ответить

Номер ответа: 25
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #25
Добавлено: 01.11.08 12:55
Ну дык молодец. Насчет переменных - согласен с тобой.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам