07. april 2001 - 16:26
Der er
6 kommentarer og
1 løsning
DLL åbne og skrive til et vindue
Jeg vil gerne lave et display til en service, jeg har implementeret i en .dll (lavet med ATL), som kører sammen med Inetinfo.exe på NT-server.
Hvordan kan jeg inde fra min .dll åbne et vindue og output´e noget tekst til det inde fra .dll´en?
Jeg søger et eksempel, gerne meget simpelt, det skal være lavet i Visual C++.
08. april 2001 - 20:53
#2
wisen <- jeg snakker om et almindeligt windows-style vindue.
jeg har løst min opgave ved at lave et ekstra consol-program og udveksle data med min service gennem en socket-forbindelse, jeg er dog stadig meget interesseret i et eksempel på hvordan man kan åbne og manipulere et vindue fra en dll
20. april 2001 - 08:51
#3
Jammen det fungerer faktisk på samme måde, som fra et almindeligt program. Du laver din dialogressource som du plejer, og for at vise den, laver du såmænd bare en instans af ressourcen, som du viser...
Jeg har ikke lige et eksempel jeg kan vise dig, men du kan prøve dig lidt frem.
/wisen
psp <- dur ikke med messageBox, da den blokerer den kaldende thread. Hvad en dialog med edit angår, så er det netop et eksempel + noget kode, jeg efterspørger. Det står også i mit spørgsmål.
Har du et eksempel og noget kode, der virker, vil jeg med glæde godkende dit svar.
Her er noget kode:
#include \"stdafx.h\"
#include <process.h>
#include <stdlib.h>
#include \"resource.h\"
//Husk: Project|Settings|C/C++|Category=Code Generation.
//Vælg \'User Runtime libirary\' = Multithreaded
//Hvis du laver dll skal det være \'Multithreaded DLL\'
void OutputThread(void *dummy);
BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
HWND hDlg;
//Main thread
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
_beginthread(OutputThread,0, NULL);
for (int count = 0; count < 150; count++)
{
Sleep(50);
if(!hDlg) return 0;
SendMessage(hDlg, WM_USER, count,0);
}
if(hDlg) DestroyWindow(hDlg);
return 0;
}
void OutputThread(void *dummy)
{
HINSTANCE hInst = GetModuleHandle(NULL);
MSG msg;
hDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), 0, DlgProc);
ShowWindow(hDlg, SW_SHOW);
while (GetMessage(&msg, NULL, NULL, NULL))
{
if (!IsWindow(hDlg) || !IsDialogMessage(hDlg, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
char buffer[128];
switch(uMsg)
{
case WM_COMMAND:
DestroyWindow(hDlg);
hDlg = 0;
break;
case WM_USER:
_itoa(wParam, buffer, 10);
SetWindowText(GetDlgItem(hDlg, IDC_TEXT), buffer);
break;
}
return 0;
}
-------------------------------------------
SCRIPT.RC
-------------------------------------------
//Microsoft Developer Studio generated resource script.
//
#include \"resource.h\"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include \"afxres.h\"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
\"resource.h\\0\"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
\"#include \"\"afxres.h\"\"\\r\\n\"
\"\\0\"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
\"\\r\\n\"
\"\\0\"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 55
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION \"Test\"
FONT 8, \"MS Sans Serif\"
BEGIN
PUSHBUTTON \"Cancel\",IDCANCEL,67,32,50,14
CTEXT \"Static\",IDC_TEXT,14,13,158,8
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 179
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
------------------------------------------------
RESOURCE.H
------------------------------------------------
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by script.rc
//
#define IDC_TEXT 100
#define IDD_DIALOG1 101
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
OK, det har givet mig en idé, selvom det ikke er helt det, jeg efterspurgte i mit spørgsmål. Du bruger messages til at sende data til et vindue, men jeg tror nok jeg vil kunne bruge det.
Her er de points, jeg lovede.