1) Jeg skal bruge forskellige måde hvorpå folk kan sende en besked (vis sms/mail/html). Er det muligt at lægge hver af de 3 metoder ud i hvert sit dll og så i hovedprogrammet bare kalde metoderne det samme? (en person vil kun ha' et dll af gangen).
Du kan sagtens gøre så du laver et program der tager udgangspunkt i en funktion, f.eks. method(). Du laver derpå 3 DLL'er med samme funktions navn - og samme navn. Så kan du i en "pakke" med din application samt DLL'en, enten være et program med en DLL hvori den ene metode af sms/mail ligger i, osv. osv.
2) Jeg ville også gerne lave et dll-med nogle print-muligheder. Er det muligt? Og er det muligt for hovedprogrammet at deteketere om man har print-dll'et så det slet ikke fremgår af menu'en (i hovedprogrammet) eller muligvis bare er grået ud.
Der findes forskellige måder at tjekke hvis en fil, eller i dette tilfælde bare en fil med suffikset .dll eksisterer. Så dette skulle ikke være noget problem.
Du kan prøve dette program med 2 DLL-filer, samme navn men med forskellige "metoder" i funktionen "method".
// app.cpp
#include <iostream>
#include <windows.h>
typedef void(WINAPI *func)();
func Method;
int main()
{
HINSTANCE hLib = LoadLibrary("type.dll");
if(hLib == NULL)
return -1;
Method = (func)GetProcAddress((HMODULE)hLib, "Method");
if(Method == NULL)
{
FreeLibrary((HMODULE)hLib);
return -1;
}
Method();
FreeLibrary((HMODULE)hLib);
return 0;
}
// type.dll
// Version med SMS
#ifndef MyDLL
#define MyDLL
#include <iostream>
extern "C" __declspec(dllexport) void Method()
{
std::cout << "SMS" << std::endl;
}
#endif
// type.dll
// Version med MAIL
#ifndef MyDLL
#define MyDLL
#include <iostream>
extern "C" __declspec(dllexport) void Method()
{
std::cout << "MAIL" << std::endl;
}
#endif
Grunden til at filerne skal hedde det samme er så main-programmet, app.cpp, kan finde dem. Det samme gælder funktionsnavn. Man kunne også vælge at gøre så den tjekker for forskellige filer, men dette er et eksempel.
Hvis du vil have at folk selv skal kunne lave sine egne DLL-filer til programmet kan du vælge at bruge en model til at gøre det. Jeg foretrækker personligt COM (Component Object Model), da det kan bruges i mange sprog, så man ikke nødvendigvis skal lave det C++.
Held og lykke med det hele!