Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Создание и использование DLL в VB и VBA
     
    
Добавлено: 28.08.08 20:19
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     Jen
 Jen
      
       
  
Значит вот собственно тема
 
    
В VB создаю новый проект ActiveX DLL, там пишу такую простую функцию:
Sum = a + b
End Function 
Затем создаю DLL: File -> Make MyDll.dll, все, DLL готова.
Дальше создаю новый VB проект, ставлю кнопочку и пишу тама:
Private Sub Command1_Click()
MsgBox Sum(10, 5)
End Sub
Подключаю DLL: Project->References - ищу там свою DLL, ставлю галку.
Теперь пускаю свой проект, а он мне пишет:
Compile error: Constants, fixed-lenth strings, user-defined types and Declare statments not allowed in public members of object modules.
Как с этим бороться?
Потом пишу такй-же код в VBA, тут мне говорит:
Can't find DLL entry point Sum in MyDll.dll 
А как с этим бороться?
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 8
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: 
 




Администратор
ICQ: 278109632 
Вопросов: 42
Ответов: 3949
      
 Web-сайт:  
 Профиль |  | #1
      
Добавлено:  28.08.08 21:41
       
    
       
  
Ну в VB все просто, тут тебе просто не надо объявлять функцию Declare, достаточно просто подключить либу. А по поводу остального уже надоело говорить, что VB6 создает библиотеки классов, а не функций.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: Jen
 Jen




Вопросов: 2
Ответов: 4
      
 Профиль |  | #2
       
Добавлено:  29.08.08 13:59
       
    
       
  
Хорошо, убираю строчку Declare, пишет Sub or Function not defined. ???
 
    
Так, теперь пишу:
MsgBox UserDocument1.Sum(10, 5)
End Sub 
У меня там написано в DLL: 
Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
Member of MyDLL.UserDocument1
Теперь пишет    Run time error 424
Как с этим бороться?
Сорри, что задаю вопросы наверное уже поднимавшиеся, поиск по форуму не работает, пишет Server Error in '/' Application.
Если можно объясните вкратце, или где почитать подробно можно?
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа: mc-black
 mc-black


ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #3
      
Добавлено:  29.08.08 14:06
       
    
       
  
Executioner,
 
    
Согласен по сути, но позволь поправлю тебя в терминологии. Не бывает никаких "библиотек класссов" и "библиотек функций". VB6 умеет создавать "ActiveX DLL", т.е. COM-технологию (можете встретить также аббревиатуру OLE, по сути одно и то же).
Jen пытался вызвать функцию из ActiveX DLL сразу двумя способами: как ActiveX DLL и как из обыкновенной DLL (Dynamic Link Library, библиотека динамической компоновки, или связывания). Библиотеки второго типа широко используются в Windows как основа Windows 32-bit API (Win32 API). Эти библиотеки построены в формате файлов Portable Executable (PE), так же, как и всюду распространенные EXE. Так уж получилось, что VB6 умеет использовать эти библиотеки через объявление (Declare), но не умеет их создавать (кроме как особо извращённым способом, о котором вам лучше всего не знать).
Все, что надо сделать, чтобы программа Jen стала работать, это убрать строчку объявления.
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: 
 




Администратор
ICQ: 278109632 
Вопросов: 42
Ответов: 3949
      
 Web-сайт:  
 Профиль |  | #4
      
Добавлено:  29.08.08 14:43
       
    
       
  
А при чем тут UserDocument? Ты не то делаешь  
     Гугли мануалы, ибо щас расписывать это все я не буду.
 Гугли мануалы, ибо щас расписывать это все я не буду.
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: mc-black
 mc-black


ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  29.08.08 15:16
       
    
       
  
Jen, хм.. У меня нет под рукой VB6, а на вскидку я не скажу сейчас наверняка. По-моему, надо для ActiveX DLL создать свой модуль класса, в нем создать свой собственный класс, инициализировать. А процедуру/функцию нужно оформлять как метод класса. На счёт глобально-объявленных подпрограмм не помню.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: mc-black
 mc-black


ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #6
      
Добавлено:  29.08.08 15:46
       
    
       
  
Сделай проще - качай любой пример ActiveX DLL с сайта и посмотри как это сделано, все вопросы отпадут сами собой. Но API'шную, т.е. нативную DLL на на VB6 не пишут. Есть для этого Power Basic, С, C++ , ассемблер и др. инструменты. Удачи!
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: HACKER
 HACKER








 
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
      
 Профиль |  | #7
       
Добавлено:  30.08.08 00:22
       
    
       
  
Создаешь UserControl (он же ActiveX по сути) пишешь в нем нужную функцию, компилируешь - получается компонент ocx or dll не помню - пофиг. Берешь его потом и подключаешь как и любой другой компонент.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: mc-black
 mc-black


ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #8
      
Добавлено:  02.09.08 09:38
       
    
       
  
HACKER, ну ты меня удивил.