F: Funktionen aus DLLs in VC++ 6.0 einbinden / verwenden

smallone

Mitglied
Hallo zusammen,

ich habe einige Probleme beim Einbinden der Inpout32.dll (ich möchte unter WinXP (daher die Inpout32.dll) mittels einer MFC-Anwendung Bits an den LTP1- Parallelport schieben, um LEDs zu steuern):

folgenden Code habe ich hier im Forum unter
http://www.tutorials.de/forum/showthread.php?t=134607&highlight=dll
gefunden (von Homer) und an meine DLL angepaßt (der Export der Inpout32.dll sind die Funktionen Inp32(short) und Out32(short, short):

Code:
	// etwas zur Verständlichkeit:
	typedef (_stdcall *MyFunktionPtr)(short,short); // Funktion Out32 hat 2 Parameter vom Typ short.

	HMODULE MyModule; // Handle auf die DLL
	MyModule = LoadLibrary("inpout32.dll");     // in welchem Verzeichnis muß die DLL-Datei liegen 
	if(HMODULE) // konnte die DLL geladen werden?
	{
	  MyFunktionPtr MyFunktion; // Deklaration eines Funktionszeigers
	  MyFunktion = (MyFunktionPtr)GetProcAdress(MyModule, "Out32");
	  if(MyFunktion) // konnte die Funktionsaddresse gefunden werden
	  {
		int ret;
		ret = MyFunktion(888,255);  // Aufruf
		
	}
	  else
	  {
		// Fehlerbehandlung
	  }
	  FreeLibrary(MyModule);
	}
	else
	{
	 // Fehlerbehandlung
	}

Folgende Fehlermeldungen und Warnungen bekomme ich:

1.) error C2065: 'GetProcAdress' : nichtdeklarierter Bezeichner

2.) warning C4091: '' : Ignoriert auf der linken Seite von 'struct HINSTANCE__ *', wenn keine Variable deklariert wurde


Daher meine Fragen:
1. Was mache ich falsch, bzw. welche Includes fehlen mir vielleicht
2. Gibt es eine einfachere Lösung, mit der ich in einer MFC an die Out32-Funktion der DLL herankomme ?
3. Ist der erste Typdef richtig ? Ich habe den Rückgabetyp entfernt, da es sonst eine Fehlermeldung gab...
4. Wo muß ich die DLL hinkopieren, damit mein Programm sie findet ?
5. Es sollte doch ok sein, wenn ich den obigen Code unter "CDialog::OnInitDialog();" in meiner cpp stehen habe, oder

Hat jemand von euch zufällig bereits so ein kleines Programm geschrieben und könnte mir seinen Code mal zeigen ?

Vielen Dank für Eure Hilfe !
Grüße BEN
 
Zuletzt bearbeitet:
Hallo @ all,

mitlerweile habe ich eine Lösung gefunden, dank der MSDN funktioniert nun folgender code, der beim Click auf einen Button aufgerufen wird:



Code:
void CMFC_Out32_V3Dlg::OnSendToLTP1() 
{

	// dies ist die Abschicken-Taste, hier muß behandelt werden, wie ich die Bits an den LTP port schicke


	HINSTANCE hDLL;               // Handle to DLL
	LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
	short sPortAdress = 888;   // dezimal für LTP1
	short sData = 000;  // dezimal für 00000000 bit
	UINT  uParam2, uReturnVal;

	hDLL = LoadLibrary("Inpout32");
	if (hDLL != NULL)
	{
	   lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,"Out32");
	   if (!lpfnDllFunc1)
	   {
		  // handle the error
		  FreeLibrary(hDLL);       
//		  return 1;
	   }
	   else
	   {
		  // call the function
		  uReturnVal = lpfnDllFunc1(sPortAdress, sData);
	   }
	}

ganz oben bei den #includes steht außerdem noch:
Code:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);


Gruß BEN
 
Zurück