Passing a handle from Excel to a dll

T

Torben Laursen

Hi

I'm opening a window in a dll using VBA in excel
When the window is open I get 2 icons on the taskbar one for Excel and one
for the window.

Therefore I want to pass a handle from Excel to the window in the dll so I
only get one icon on the taskbar

C++ code in dll:

extern "C" __declspec(dllexport)void __stdcall Show_PickCalcForm(int &Modal,
HWND CallingApp)

But how do I call this function using VBA?

This is what I have now:
Declare Sub Excel_PickCalcForm Lib "BaseCalc.dll" (ByRef Modal As Long,
????)

Can anyone tell me what to write as the last argument and how to use the
function?

Thanks Torben
 
K

keepITcool

1st:
you have to be very carefull with passing arguments byref.
2nd:
whether you get several windows on the taskbar or only one depends
on the option Windows in Taskbar in Tools/options/View
3rd:
do you want to pass the window handle of the application or the child
window of the workbook?

I'll assume the latter.

in windows XP and newer (i dont know about xl2000)
application.hwnd will you the handle to the application.window


However to keep it simple and compatible, my proc will just use
findwindowex to locate the window.

For the fun of it I've coded it as a Property of thisworkbook,
but of course you can put it in a normal module AND pass a workbook
argument

'Thisworkbook Module
Option Explicit

Private Declare Function FindWindowEx _
Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long

Property Get WorkbookHnd() As Long
Dim lp As Long
'Application
lp = FindWindowEx(0&, 0&, "XLMAIN", Application.Caption)
'Desktop
lp = FindWindowEx(lp, 0&, "XLDESK", vbNullString)
'Workbook
WorkbookHnd = FindWindowEx(lp, 0&, "EXCEL7", Me.Windows(1).Caption)

End Property


Sub test()
Dim l&
l = Me.WorkbookHnd

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top