2016-08-25 3 views
0

Ich habe das nächste Tutorial folgen:Erste Reaktion einer DLL in C

https://msdn.microsoft.com/en-us/library/64tkc9y5(v=vs.80).aspx

Es funktioniert gut für mich. Aber ich brauche die Antwort der callbackfunctions printf:

printf(uReturnVal); 

ich den Fehler: cannot convert argument 1 from 'UINT' to 'const char *const '

ich weitere Optionen ausprobiert habe:

printf(Convert.ToString(uReturnVal)); //ERROR :'Convert': undeclared identifier [ 

Und:

printf(uReturnVal->ToString()); //ERROR: '->ToString' must point to class/struct/union/generic 

Und:

Diese
printf(uReturnVal.ToString());//error: /ERROR: '->ToString' must point to class/struct/union/generic 

ist der Code des Tutorials:

typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT); 

HINSTANCE hDLL;    // Handle to DLL 
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer 
DWORD dwParam1; 
UINT uParam2, uReturnVal; 

hDLL = LoadLibrary("MyDLL"); 
if (hDLL != NULL) 
{ 
    lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, 
              "DLLFunc1"); 
    if (!lpfnDllFunc1) 
    { 
     // handle the error 
     FreeLibrary(hDLL); 
     return true; 
    } 
    else 
    { 
     // call the function 
     uReturnVal = lpfnDllFunc1(dwParam1, uParam2); 
    } 
} 

Vielen Dank im Voraus.

Antwort

3

Das erste Argument zu printf Funktionen ist immer Formatbezeichner. In Ihrem Fall sollte printf("%u\n",uReturnVal) funktionieren. Siehe Format Specification Syntax: printf and wprintf Functions.

zu erweitern: Der obige Code rein C.

Sie es auch in C++ Stil zu tun, noch eleganter:

#include <iostream> 
... 
    uReturnVal = lpfnDllFunc1(dwParam1, uParam2); 
    std::cout << "Result is: " << uReturnVal << std::endl; 
+0

GREAT! Es funktioniert perfekt! Vielen Dank für Ihre schnelle Antwort. – user1432966

+1

Auch in C und C++ - Basistypen sind keine Objekte, Sie können also keine Methoden für sie aufrufen ('std :: string' ist eine Klasse, kein Basistyp). Eigentlich gibt es keinen eleganten, universellen und portablen Weg, um Zahlen in C zu konvertieren, wobei "sprintf (outputString,"% d ", number) am nächsten steht. Im modernen C++ (C++ 11) gibt es die 'to_string'-Funktion. – monkeyman79

+1

Überprüfen Sie diesen Link: http://www.cplusplus.com/articles/D9j2Nwbp/ – monkeyman79