Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   dll einbinden / Pointer Probleme (https://www.delphipraxis.net/167766-dll-einbinden-pointer-probleme.html)

DeddyH 24. Apr 2012 09:36

AW: dll einbinden / Pointer Probleme
 
Ich rate einmal ins Blaue:
Delphi-Quellcode:
return := COM_GetVersionReq(zeiger, @typevers);

Pow3rus3r 24. Apr 2012 12:08

AW: dll einbinden / Pointer Probleme
 
leider nicht. Immernoch "Zugriffsverletzung bei Adresse xyz. Schreiben von Adresse abc aufgetreten".

Hmm, Klingt fast danach, als wollte die Funktion was reinschreiben, wird aber durch irgend einen Grund daran gehindert, oder?

DeddyH 24. Apr 2012 12:47

AW: dll einbinden / Pointer Probleme
 
Wie sieht denn der Original-Aufruf aus?

Pow3rus3r 24. Apr 2012 13:00

AW: dll einbinden / Pointer Probleme
 
Der Originalaufruf sieht so aus:
Code:
//---------------------------------------------------------------------------
// Example of an implementation of a COM_GetVersionReq call
//---------------------------------------------------------------------------

void CHwComTestGuiDlg::OnBnClickedButtonGetversion()
{
    COM_Version version;
    if (COM_RETURN_OK == PrintErrorInfos("COM_GetVersionReq",COM_GetVersionReq(m_hCom,&version)))
    {
        printf("COM_Version: %d.%d.%d.%d\r\n",version.Major,version.Minor,version.Patch,version.Build);
    }
}
Sieht in meinen Augen aber sehr ähnlich aus, wie mein "Delphi-Versuch". m_hCom ist das Handle, welches durch die COM_TcpOpen Funktion gefüllt wurde - äquivalent meinem Delphi Programm.

DeddyH 24. Apr 2012 13:05

AW: dll einbinden / Pointer Probleme
 
Nächster Versuch:
Delphi-Quellcode:
function COM_GetVersionReq(zeiger:Pointer; var version: TCOM_Version): NativeUInt ; cdecl; external 'HwCom.dll';

Pow3rus3r 24. Apr 2012 13:25

AW: dll einbinden / Pointer Probleme
 
Super, danke dir! Nun läuft die Funktion schon mal durch und liefert 0 zurück (also alles ok soweit). Jetzt kommt die Zugriffsverletzung erst, wenn ich über end; springe.

Wird jetzt wohl noch daran liegen, dass er versucht, die Werte in eine Variable mit falschem Datentyp zu schreiben. Ich werd mal ein bisschen durch probieren.

Blup 24. Apr 2012 14:42

AW: dll einbinden / Pointer Probleme
 
Hast du bei der anderen Funktion nicht "stdcall" als Aufrufkonvention angegeben?
Im Normalfall sind alle Funktionen einer DLL einheitlich.
Es scheint mir zumindest fragwürdig warum es bei dieser Funktion dann plötzlich "cdecl" sein sollte.

brechi 25. Apr 2012 07:36

AW: dll einbinden / Pointer Probleme
 
Wird auch sehr wahrscheinlich STDCALL sein, da es beim beenden crashed, dort wo "end" an die Rücksprungadresse springt die durch doppeltes aufräumen (CDECL/STDCALL) nicht stimmt.
Hier mal ein Denkanstoß, wenn man rausfidnen will ob cdecl/stdcall, auch wenn man jetzt nicht direkt den Aufruf hat, kann man das am retn in der dll festmachen, wenn man weiß dass mind. 1 parameter vorhanden ist.

http://forum.madshi.net/viewtopic.php?t=1149

Pow3rus3r 25. Apr 2012 09:20

AW: dll einbinden / Pointer Probleme
 
Die Aufrufkoncention war mir von vorn herein unbekannt, deshalb hatte ich zuerst damit rumprobiert (zuerst stadcall, dann cdecl - jedoch bei allen Funktionen gleich). Mit CDECL hatte der Verbindungsaufbau zum Steuergerät zunächst funktioniert, deshalb hatte ich es dabei belassen.

Ich habe es nun wieder alles auf stdcall umgestellt und was soll ich sagen...es funktioniert!
Kurzum: Ihr seid der Wahnsinn! Danke für eure Geduld! Als Delphi Newbie ist der Einstieg leider etwas holprig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz