我已经将一个旧的 vb6 应用程序编译成一个 dll。最终我们将转换为 .NET,但现在我正在尝试从 DLL 加载表单。到目前为止,我已经能够在 .NET 中加载并查看 vb6 表单,但我无法激活控件。因此,下面代码中的 setparent 可以正常工作,但 sendmessage 和以下代码不能正常工作。顺便说一句,在调试模式下,这一切都很好。只有当我使用已编译的 dll 时才会出现问题。
我的声明是:
Private Shared Function SetParent(ByVal hWndChild As IntPtr, _
ByVal hWndNewParent As IntPtr) As Int32
End Function
Public Declare Auto Function SendMessage Lib "user32.dll" ( _
ByVal hWnd As IntPtr, _
ByVal wMsg As Int32, _
ByVal wParam As Int32, _
ByVal s As String _
) As Int32
Private Shared Function SetForegroundWindow(ByVal hwnd As IntPtr) As IntPtr
End Function
Private Shared Function LockWindowUpdate(ByVal hwndLock As IntPtr) As Boolean
End Function
我正在使用的代码如下:
SetParent(mintFormHandle, Me.Handle.ToInt32)
SendMessage(mintFormHandle, WM_ACTIVATE, 1, IntPtr.Zero)
SetForegroundWindow(mintFormHandle)
LockWindowUpdate(0)
Me.Refresh()
请不要对旧的 vb6 代码发表评论。是的,在一个完美的世界里,几年前就已经完成了转换。