kuhtiov писал(а):Не совсем понял, как я из обычного exe сделаю ActiveX.exe, учитываю что в проекте используются контролы типа Listbox, Text и т.д.
kuhtiov писал(а):Если не сложно, дайте ссылку на хорошую статейку, а то google пока ничего хорошего не откопал
Private Declare Function CLSIDFromProgID Lib "ole32.dll" (ByVal ProgID As Long, rclsid As GUIDs) As Long
Private Declare Function CoDisconnectObject Lib "ole32.dll" (ByVal pUnk As IUnknown, pvReserved As Long) As Long
Private Declare Function RegisterActiveObject Lib "oleaut32.dll" (ByVal pUnk As IUnknown, rclsid As GUIDs, ByVal dwFlags As Long, pdwRegister As Long) As Long
Private Declare Function RevokeActiveObject Lib "oleaut32.dll" (ByVal dwRegister As Long, ByVal pvReserved As Long) As Long
Private Type GUIDs
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Const ACTIVEOBJECT_STRONG = 0
Private Const ACTIVEOBJECT_WEAK = 1
Private OLEInstance As Long
Public Sub AddToROT()
Dim mGuid As GUIDs
Dim lp As Long
OLEInstance = 0
lp = CLSIDFromProgID(StrPtr("Backuper.Application"), mGuid)
If lp = 0 Then lp = RegisterActiveObject(gApplication, mGuid, ACTIVEOBJECT_STRONG, OLEInstance)
End Sub
Public Sub RemoveFromROT()
If OLEInstance <> 0 Then RevokeActiveObject OLEInstance, 0
CoDisconnectObject gApplication, 0
End Sub
On Error Resume Next
Set x = GetObject(, "Backuper.Application") 'пытаемся получить объект ранее запущенного бекапщика
If x Is Nothing Then 'бекапщик не был запущен
'запускаем
Set gApplication = New Application 'создается глобальный экземпляр класса, добавленного в п. 2)
AddToROT 'это нужно для того, чтобы GetObject работал с твоей программой
frmMain.Show 'прочие телодвижения
Else
x.Activate 'активируем ранее запущенный бекапщик и завершаем работу. Опрционально. Activate должно быть описано в классе из п. 2)
End If
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 86