Bei der Suche nach anderen ähnlichen Fehlern, denke ich, dass ich ein Problem mit einer illegalen Operation wie Schreiben an eine Adresse habe, die ich nicht sein sollte. Ich bin mir nicht sicher, wie ich das lösen soll. Irgendwelche Hilfe bitte?ctypes, python3.5, OSError: Ausnahme: Zugriffsverletzung schreiben 0x00000000
Genaue Fehler Ich erhalte:
in GetSoftwareVersion()
result = f(LCP_Version, FCP_Version)
OSError: exception: access violation writing 0x00000000
Funktionen I
x = GetSoftWareVersion()
print(x)
GetSoftwareVersion bin() aufrufen Inhalt
def GetSoftwareVersion():
f = shim.GetSoftwareVersion
LCP_Version = ct.c_char_p(0)
FCP_Version = ct.c_char_p(0)
result = f(LCP_Version, FCP_Version)
if result:
print(find_shim_error(result))
return LCP_Version.contents.value, FCP_Version.contents.value
bearbeiten: Hinzufügen des entsprechenden C++ Code
PCSHIMDLL_API error_status_type GetSoftwareVersion(
char* LCP_Version,
char* FCP_Version
)
{
error_status_type return_status = SUCCESS;
string LCP_V("");
string FCP_V("");
LaserIDType_var laserID;
laserID = p_DiagIF->GetLaserID();
LCP_V = laserID->m_LCPSoftwareVersion;
FCP_V = laserID->m_FCPSoftwareVersion;
strcpy(LCP_Version, LCP_V.c_str());
strcpy(FCP_Version, FCP_V.c_str());
return return_status;
}
Was ist 'shim' (ich nehme an, es ist eine C-DLL), und wie sieht' dpcGetSoftwareVersion' Deklaration (und Beschreibung) aus? Ich sehe, dass Sie 2 'NULL'' char' Zeiger übergeben, ist das die Absicht? Die Funktion weist ihnen Speicher zu und speichert dann einige Daten in diesem Speicher (nicht sehr üblich). Oder es erwartet 2 'char *' s, die auf einen "zugewiesenen" Bereich zeigen, in dem die Daten gespeichert werden (basierend auf dem Fehler, der dies zu sein scheint)? Versuchen Sie, sie mit [ctypes.create_string_buffer] (https://docs.python.org/2/library/ctypes.html#ctypes.create_string_buffer) zu initialisieren. – CristiFati