Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Проблема с сообщениями (А-а-а-а-а !!!) Добавлено: 20.04.06 14:52  

Автор вопроса:  Екатерина
VB.Net
Есть exe c функциями и dll создаваемая из exe
из exe все что в dll вижу и доступно
но надо при определенной ситуации в dll вызвать функцию из exe-ка ( а также функцию из еще одной dll этого exe-ка)
Надо посылать сообщения exe-ку и ловить их, если да то как
Никогда не сталкивалась с такой проблемой..
Подскажите плиз

Ответить

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

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 20.04.06 19:43
Надо посылать сообщения exe-ку и ловить их

Если все 3 составляющие задачи находятся в пределах 1-й сборки, то можно обойтись малой кровью..
Что мешает тебе передать в dll экземпляр того класса, в котором находится нужная функция? И у же там, при наступлении твоих определнных условий вызвать нужную тебе функцию...

Либо другой вариант:
-В dll , в классе, где происходит проверка твоего условия, определяешь какое событие, которое будешь генерировать при наступлении того самого условия..
-В ехе, создаешь экземпляр этого класса( из dll ) и подписываешься на то самое событие. И в обрабочике этого события вызываешь нужную тебе функцию.
Если же тебе необходимо вернуть результат вызова ф-и обратно в dll, то так же через параметр события объявленный как ByRef возвращаешь результат обратно..

Ответить

Номер ответа: 2
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #2
Добавлено: 20.04.06 20:00
[off-top]О, а ты куда пропала? Чего в аське не сидишь?[/off-top]

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 21.04.06 00:43
Есть exe c функциями и dll создаваемая из exe

Из ресурсов что ли?

Какая dll? Если stdcall (т.е. такая как kernel32.dll или user32.dll), то надо декларировать типа так:
Private Declare Sub AccessibleChildren Lib "OLEACC.dll" (ByRef ByRef paccContainer As IAccessible, ByVal iChildStart As Int32, ByVal cChildren As Int32, ByRef rgvarChildren As Variant, ByRef pcObtained As Int32)
Private Declare Function acmGetVersion Lib "msacm32.dll" () As Int32
Private Declare Function AddMonitor Lib "winspool.drv" Alias "AddMonitorA" (ByVal pName As String, ByVal Level As Int32, ByRef pMonitors As Byte) As Int32
Private Declare Function AreAnyAccessesGranted Lib "advapi32.dll" (ByVal GrantedAccess As Int32, ByVal DesiredAccess As Int32) As Int32
Private Declare Function CertAlgIdToOID Lib "crypt32.dll" (ByVal dwAlgId As Int32) As Int32
Private Declare Function CertRemoveEnhancedKeyUsageIdentifier Lib "crypt32.dll" (ByRef pCertContext As Int32, ByVal pszUsageIdentifier As String) As Int32


Если ActiveX или .Net, то подключи её к проекту (видимо придётся динамически, но тут я не помощник - учи reflection, а если статически) и работай как с обычным классом.

Звякнуть из библии в первом случае можно используя CallBack функции и делегаты:
Public Delegate Function FPtr( ByVal value As Integer ) As Boolean
Public Delegate Function FPtr2( ByVal value As String ) As Boolean

Public Class LibWrap
   ' Declares managed prototypes for unmanaged functions.
   Declare Sub TestCallBack Lib "..\LIB\PinvokeLib.dll" ( ByVal cb _
      As FPtr, ByVal value As Integer )
   Declare Sub TestCallBack2 Lib "..\LIB\PinvokeLib.dll" ( ByVal cb2 _
      As FPtr2, ByVal value As String )
End Class 'LibWrap


Public Class App
   Public Shared Sub Main()

      Dim cb As FPtr
      cb = AddressOf App.DoSomething
      Dim cb2 As FPtr2
      cb2 = AddressOf App.DoSomething2
      LibWrap.TestCallBack( cb, 99 )
      LibWrap.TestCallBack2( cb2, "abc" )
   End Sub 'Main
   Public Shared Function DoSomething( ByVal value As Integer ) As Boolean
      Console.WriteLine( ControlChars.CrLf + "Callback called with _
         param: {0}", value )
      …
   End Function 'DoSomething
   Public Shared Function DoSomething2( ByVal value As String ) As Boolean
      Console.WriteLine( ControlChars.CrLf + "Callback called with _
          param: {0}", value )
      …
   End Function 'DoSomething2
End Class 'App


А для второго случая просто вызывай события.

Вроде так...

Ответить

Номер ответа: 4
Автор ответа:
 Екатерина



Вопросов: 23
Ответов: 25
 Профиль | | #4 Добавлено: 21.04.06 20:33
Спасибо большое, попробую, но вот как событие DLL обявить дополнитеельно в exe не знаю...
Не подскажите?
Если событие наступит в DLL то и в exe оно само автоматически наступит? Я так поняла?
Спасибо

Ответить

Номер ответа: 5
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 21.04.06 22:06
По шагам: библия содержит классы, которые имеют или не имеют события. Поэтому тебе надо в экзешнике объявить не сами события, а классы их содержащие. Но эти классы надо объявить с WithEvents. Ну или хэндлеры добавлять, если динамически, но это потом.

Ответить

Страница: 1 |

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



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