Problem mit einbinden einer DLL



  • Hi!

    Kann mir einer von euch mal helfen?

    Ich habe folgenden Code:

    int z=0;
    
    typedef UINT (CALLBACK* Initialise)();
    typedef UINT (CALLBACK* ReadPosition)( int *ptr_ncolours, float *ptr_pderrs, float *ptr_cderrs);
    
    .
    .
    .
    
    void CDLLOffenDlg::OnButton1() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	Initialise initialise;    // Funktionszeiger
    	ReadPosition readposition;
    	float ptr_pderrs1[5];
    	float ptr_cderrs1[5];
    	int ptr_ncolours;
    
    	dll_handle = LoadLibrary( "TesttestDll.dll" );
    
      initialise = (Initialise)GetProcAddress(dll_handle,"Initialise");
    		readposition = (ReadPosition)GetProcAddress(dll_handle,"ReadPosition"); 
    
    	m_initialise = 1;
      m_initialise = initialise();
    	m_readposition = 1;
    	m_ptr_ncolours=1;
    	ptr_ncolours = m_ptr_ncolours;
    	m_ptr_pderrs=m_ptr_cderrs=1;
    	ptr_pderrs1[1]=  ptr_cderrs1[1] = m_ptr_cderrs;
    	m_readposition = 0;
    	ReadPosition(&ptr_ncolours,ptr_pderrs1,ptr_cderrs1);
    
    	m_ptr_ncolours=ptr_ncolours;
    	m_ptr_pderrs=ptr_pderrs1[z];
    	m_ptr_cderrs=ptr_cderrs1[z];
    	if(z==4)
    	{
    		z=0;
    	}
    	else
    	{
    		z++;
    	}
    	UpdateData(FALSE);
    }
    

    und bekommen folgenden Fehler ausgegeben:

    C:\work\DLLOffen\DLLOffenDlg.cpp(212) : error C2564: 'unsigned int (__stdcall *)(int *,float *,float *)' :
    Die Funktionskonvertierung in den integrierten Typ unterstuetzt nur ein Argument
    

    Weiss jemand von euch wie ich den Fehler beheben kann?



  • blind schrieb:

    Weiss jemand von euch wie ich den Fehler beheben kann?

    Ja.

    Falls du auch wissen wolltest, wie:
    An Stelle des Funktionszeigertyps den Funktionszeiger benutzen.



  • Was muss ich machen? Weis nicht genau was du meinst.

    Kannste mal bitte eine beispiel geben oder mir sagen wie das geht bin noch blutiger anfänger in sachen zeiger.



  • In der Zeile, in der der Compiler den Fehler meldet, verwendest du ReadPosition. Das ist der Funktionszeigertyp, den du weiter oben mit typedef angelegt hast.

    Da gehört aber kein Funktionszeigertyp hin, sondern ein Funktionszeiger. Du hast dir mit dem zweiten GetProcAddress schon einen besorgt, den musst du benutzen.



  • Jo Danke hatte es ursprünglich geändert da ich die Funktion erst Lokal hatte und sie jetzt eben in eine DLL ausgelagert habe und vergessen hatte diese Zeile wieder zu ändern.


Anmelden zum Antworten