Dr.Doom
2014-09-17, 16:08:35
Howdy,
ich versuche eine einfache DLL zu erstellen, um "Schulungsmaterial" für Python in Verbindung mit ctypes zu haben.
In der DLL sollen so komplexe Funktionen drin sein, wie bspw.
ctypes_tester.cpp
...
CTYPES_TESTER_API int function_one(void)
{
return 42;
}
CTYPES_TESTER_API float function_two(float f)
{
return f;
}
...
ctypes_test.h
...
#ifdef CTYPES_TESTER_EXPORTS
#define CTYPES_TESTER_API __declspec(dllexport)
#else
#define CTYPES_TESTER_API __declspec(dllimport)
#endif
CTYPES_TESTER_API int function_one(void);
CTYPES_TESTER_API float function_two(float f);
...
Ich kann auf die DLL in Python zwar zugreifen
print ctypes.cdll.LoadLibrary("ctypes_tester.dll")
>>> <CDLL 'ctypes_tester.dll', handle f780000 at 1d977f0>
Aber beim Zugriff auf eine der Funktionen gibt es dann einen Fehler:
AttributeError: function 'function_one' not found
"Fertige" DLLs habe ich schon 10000x in Python genutzt, aber ich hab' noch nie eine selber erstellt, daher weiss ich nicht, was ich falsch gemacht haben könnte oder wo man nun zu drehen hat.
Ich habe in VS2013 einfach ein neues Win32-Projekt gestartet, im Folgedialog "DLL" angehakt und dann "Fertig" gedrückt.
Nun habe ich drei Headerdateien "ctypes_tester", "stdafx" und "targetver", sowie drei Quelldateien "ctypes_tester", "dllmain" und "stdafx".
Was ich in die ctypes_tester-Dateien geschrieben habe, sieht man oben, den Rest habe ich nicht angefasst.
Hat jemand einen Tipp für'n C-Analphabeten?
EDIT: Aufrufkonvention ist in den Projekteigenschaften auf __cdecl gestellt.
ich versuche eine einfache DLL zu erstellen, um "Schulungsmaterial" für Python in Verbindung mit ctypes zu haben.
In der DLL sollen so komplexe Funktionen drin sein, wie bspw.
ctypes_tester.cpp
...
CTYPES_TESTER_API int function_one(void)
{
return 42;
}
CTYPES_TESTER_API float function_two(float f)
{
return f;
}
...
ctypes_test.h
...
#ifdef CTYPES_TESTER_EXPORTS
#define CTYPES_TESTER_API __declspec(dllexport)
#else
#define CTYPES_TESTER_API __declspec(dllimport)
#endif
CTYPES_TESTER_API int function_one(void);
CTYPES_TESTER_API float function_two(float f);
...
Ich kann auf die DLL in Python zwar zugreifen
print ctypes.cdll.LoadLibrary("ctypes_tester.dll")
>>> <CDLL 'ctypes_tester.dll', handle f780000 at 1d977f0>
Aber beim Zugriff auf eine der Funktionen gibt es dann einen Fehler:
AttributeError: function 'function_one' not found
"Fertige" DLLs habe ich schon 10000x in Python genutzt, aber ich hab' noch nie eine selber erstellt, daher weiss ich nicht, was ich falsch gemacht haben könnte oder wo man nun zu drehen hat.
Ich habe in VS2013 einfach ein neues Win32-Projekt gestartet, im Folgedialog "DLL" angehakt und dann "Fertig" gedrückt.
Nun habe ich drei Headerdateien "ctypes_tester", "stdafx" und "targetver", sowie drei Quelldateien "ctypes_tester", "dllmain" und "stdafx".
Was ich in die ctypes_tester-Dateien geschrieben habe, sieht man oben, den Rest habe ich nicht angefasst.
Hat jemand einen Tipp für'n C-Analphabeten?
EDIT: Aufrufkonvention ist in den Projekteigenschaften auf __cdecl gestellt.