DLLScreenCap-Beispiel: Demonstriert eine reguläre DLL, statisch oder dynamisch mit MFC verknüpft

Das DLLScreenCap-Beispiel veranschaulicht eine dynamic-link Bibliothek (DLL) Version des ein Bildschirm erfassen Tool. DLLScreenCap ersetzt das DLLTRACE-Beispiel veraltet ist. DLLTRACE wurde eingeführt, in MFC, Version 1.0 zu veranschaulichen, eine DLL schreiben, die selbst statisch mit MFC-Bibliothek verknüpft ist. DLLScreenCap bietet eine C#-Programm-Schnittstelle für die Microsoft Windows-Anwendung mit der er dynamisch verknüpft ist. Eine DLL, die statisch mit MFC-Bibliothek verknüpft ist kann nicht erfolgreich Memberfunktionen von Klassen exportieren, die von MFC-Klassen abgeleitet sind.

Das Verfahren zum statischen Verknüpfen einer DLL zu MFC-Bibliothek wird im Technischer Hinweis 11 erläutert: Verwenden von MFC in einer DLL. Das DLLScreenCap-Beispiel kann auch mit MFC dynamisch verknüpft werden ohne eine Erweiterungs-DLL. Vor dem Sie eine benutzerdefinierte DLL statisch mit MFC verknüpfen implementieren möchten, sollten Sie sich als eine MFC-Erweiterungs-DLL, implementieren, wie in Technischer Hinweis 33 erläutert: DLL-Version von MFC und als vom Beispiel 4fezhh3d(v=vs.100).md DLLHUSK illustrierten.

Eine DLL nicht eine Erweiterungs-DLL, die mit der MFC-Bibliothek verknüpft ist muss über damit ein CWinApp-abgeleitete Klasse und ein einzelnes Objekt dieser Anwendungsklasse wie bei ausführbaren MFC Anwendungen der Fall ist. Das CWinApp -Objekt der DLL, jedoch nicht vorhanden Haupt-Meldungsverteilschleife sein wie das CWinApp-Objekt einer Anwendung besitzt. Wenn die DLL nicht modale Dialogfelder öffnet oder ein Hauptrahmenfenster der eigenen hat, muss Haupt-Meldungsverteilschleife der Anwendung eine exportierte Routine Aufrufen von der DLL Aufrufe wiederum die Memberfunktion CWinApp::PreTranslateMessage, der die DLL-Anwendungsobjekts. Dies wird durch die durch DLLScreenCap.dll exportiert FilterDllMsg-Funktion dargestellt.

ScreenCapApi.h zeigt, dass eine Möglichkeit bieten, eine DLL-Schnittstelle für Clientanwendungen ist zum Deklarieren von Funktionen mit extern "C". Die Verwendung von extern "C"bietet mehrere Vorteile. Zunächst vereinfacht Ihre DLL verwendbaren von nicht-c++-Clientanwendungen. Zweitens verringert es DLL Aufwand, da die C++-Namensergänzung nicht auf den exportierten Namen angewendet werden. Drittens erleichtert es explizit zu einer DEF-Datei (zum Exportieren nach Ordnungszahl), hinzufügen, ohne zu C++-Namensergänzung kümmern.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

Das DLLScreenCap-Beispiel besteht aus zwei Projekten: DLLScreenCap, einem DLL-Projekt, und ScreenCap, ein EXE-Projekt, der die DLL aufruft.

Erstellung von ScreenCap aus der bereitgestellten Projektmappe wird automatisch DLLScreenCap erstellen und kopieren die DLL in Ausgabeverzeichnis von ScreenCap des.

Note    Da in diesem Beispiel wird eine benutzerdefinierte Build-Schritt, verwendet um eine Datei kopieren, sollten Sie die Projektmappe mit einen UNC-Pfad öffnenLegen Sie die Beispieldateien in einem Verzeichnis mit einem Laufwerkbuchstaben.

So erstellen Sie und führen das DLLScreenCap-Beispiel

  1. Öffnen Sie die Projektmappe DllScreenCap.sln.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektordner ScreenCap, und klicken Sie auf festlegen als Startprojekt im Kontextmenü auf.

  3. erstellen Sie Menü, klicken Sie auf erstellen.

  4. Debuggen Sie auf Menü, klicken Sie auf Starten ohne Debuggen.

Das ScreenCap Fenster zeigt den letzten nach skaliert wird, um die Fenstergröße erfassten Bildschirm. Klicken Sie auf im Dateimenü Configure Screen Capture. Dies öffnet ein Dialogfeld zum angeben, ob Erfassen des Bildschirms oder das aktive Fenster sowie einen Pfad zu, wobei die aufgezeichnete Datei gespeichert werden sollten. Klicken Sie auf So erstellen Sie eine aufgezeichnete Datei und Aktualisierung der Clientfensteranzeige Screen Capture.

Konvertieren von DLLScreenCap, dynamisch mit MFC DLL verknüpfen

DLLScreenCap veranschaulicht, wie eine reguläre DLL mit einer exportierten Funktion erstellen, die aufgerufen werden können, um ein modales Dialogfeld angezeigt wird. In älteren Versionen von Visual C++ war dies die einzige Option für reguläre DLLs. Diese Arten von DLLs wurden früher als _USRDLLs bezeichnet.

Nun ist es für eine reguläre DLL mit MFC von der gemeinsam genutzten MFCx0 DLL möglich. Aufgrund des Potentials um die Größe des Builds zu reduzieren sollten Sie das DLLScreenCap-Beispiel auch mithilfe der gemeinsam genutzten MFC-DLL erstellen. Unterstützung von freigegebenen Bibliothek in DLLScreenCap.dll wird Verkleinern des eine Release-Build-DLL von über 100 KB auf etwa 16 KB und wird die Größe des Debugbuilds von über 1 MB auf 100 KB reduzieren. Zur Unterstützung von dynamisch verknüpfen in DLLScreenCap verwenden Sie das Makro AFX_MANAGE_STATE, um globalen MFC-Modulstatus ordnungsgemäß zu wechseln.

Um sicherzustellen, dass DLLScreenCap in einer freigegebenen Bibliothek verwendet werden können

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten ScreenCap, und klicken Sie auf Eigenschaften im Kontextmenü auf.

    Das Dialogfeld Eigenschaftenseiten mit angezeigt wird.

  2. Klicken Sie im Menü Dropdownliste Konfiguration auf mehrere Konfigurationen. Finden Sie unter Festlegen von Visual C++-Projekteigenschaften Weitere Informationen über das Dialogfeld Eigenschaftenseiten .

  3. Select both the Release and Debugbuilds to change their settings.

  4. In der General Property Page für das Projekt stellen Sie sicher, dass verwenden von MFC-Eigenschaft auf die Verwendung von MFC in einer freigegebenen DLL-Eigenschaft aktiviert ist.

  5. Stellen Sie sicher, dass die folgende Codezeile am Anfang jeder Funktion aus der DLL exportierten befindet (siehe Verwalten der Statusdaten von MFC-Modulen für eine Diskussion):

    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    

DllScreenCap.dll exportiert beispielsweise vier Funktionen:

  • CaptureScreen

  • ConfigureCapture

  • ProcessDLLIdle

  • FilterDLLMsg

FilterDLLMsg sollte in der konvertierten Form folgendermaßen aussehen:

BOOL WINAPI FilterDllMsg(LPMSG lpMsg)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState())
   TRY
   {
       return AfxGetApp()->PreTranslateMessage(lpMsg);
   }
   END_TRY
return FALSE;
}

Schlüsselwörter

Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:

CDialog::DoModal, CWinApp::InitInstance, CWinApp::OnIdle, CWinApp::PreTranslateMessage, CWnd::DoDataExchange, CWnd::GetClientRect, CWnd::OnPaint, ShowWindow, UpdateWindow, CImage, AFX_MANAGE_STATE, AfxGetStaticModuleState, CWnd::GetDesktopWindow, CWnd::GetActiveWindow, CImage::Create, CImageDC, CImage::Save, SHBrowseForFolder, CImage::Load, CDC::SetStretchBltMode, CImage::StretchBlt, CWnd::OnEraseBkgnd, CWindowDC

Siehe auch

Weitere Ressourcen

MFC-Beispiele