Exception-Problem ...mal wieder... :(



  • Hallo zusammen,
    ich habe mal wieder ein Exception-Problem und zwar kommt bei:

    bool __fastcall TProfibus::Identify(int Slave_int)
    {
    unsigned long dpr;
    unsigned int* n;
    
    dpr=pDPIdentifySlave(Slave_int,n,false);
    PostMessage(Application->MainForm->Handle,MSG_TYPE_ASYNC,0,0);
    if (dpr != DP_INCOMPLETE)
      {
        ASYNC_RESULT AsyncResult;
        dpr=pDPGetAsyncResult(&AsyncResult);  // Funktionsaufruf
    

    ...in der Zeile von dpr=pDPGetAsyncResult(AsyncResult); die Exception: "Zugriffsverletzung bei der Adresse 10004650 in Modul 'prof_dp.dll'. Schreiben von Adresse 00000000."
    Die Variable ist so deklariert (global in der *.cpp-Datei)

    typedef unsigned long (__declspec (dllimport) DPGetAsyncResultDll)(ASYNC_RESULT);
       DPGetAsyncResultDll* pDPGetAsyncResult;
    

    und im Konstruktor steht das:

    pDPGetAsyncResult = (DPGetAsyncResultDll*)::GetProcAddress(hInstance, "DPGetAsyncResult");
      if (!pDPGetAsyncResult)
        {
         Application->MessageBox(AnsiString("Fehler bei der Adressierung der Funktion \"pDPGetAsyncResult\"\nFehler#:" + AnsiString(GetLastError())).c_str(), "Fehler",16);
        }
    

    Beim selben Funktionsaufruf an anderer Stelle im Code passiert keine Exception... 😞



  • Hallo ron,

    Ich kann mir eigentlich nur vorstellen, dass es an der Variablen AsyncResult liegt. Ich schätze mal, das das eine Struktur ist. Vielleicht enthält sie irgendwelche Pointer, denen kein Speicherplatz zugeordnet wurde. Immerhin enthält sie ja deine Rückgabewerte. Zeig doch mal die Deklaration.

    Ciao



  • Braunstein schrieb:

    <Fullquote gelöscht>

    Okay, die Deklaration sieht so aus:

    union
    	{
    		struct								/* result of DPOpenSlave() CMD_OPEN */
    		{
    			DP_DATA			pDpData;		/* result slave data */
    		} Open;
    		struct								/* result of DPGetCfg() CMD_GETCFG */
    		{
    			unsigned char	ucLength;		/* result config length */
    			unsigned char	Buffer[256];	/* result configuration */
    		} GetCfg;
    		struct								/* result of DPIdentifySlave() CMD_IDENTIFY */
    		{
    			unsigned int	uIdentNumber;	/* result ident number */
    		} Ident;
    	} Data;
    } ASYNC_RESULT;
    

    Edit:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • Also das sieht Ok aus. Hier ist kein Pointer drin. Muss wohl an was anderen liegen. Ich kann hier aber keinen Fehler weiter erkennen.

    Sorry



  • Braunstein schrieb:

    <Fullquote gelöscht>

    Hm, mist 🙂 Naja, vielleicht kennt jemand anderes DIE Lösung meines Problems.

    Edit:
    Zitate bitte auf das Notwendigste beschränken. Danke!


Anmelden zum Antworten