Ich bin ein C++ - Anwendung, die Python + numpy aufrufen wird und ich möchte DELAYLOAD die Python-DLL. Ich benutze Visual Studio 2015 unter Windows mit 64-Bit-Python 3.6. DELAYLOAD funktioniert gut, solange ich nicht numpy benutze. Sobald ich import_array()
rufe, kann ich nicht mehr mit DELAYLOAD Option bauen. Der Linker FehlerVerzögerung laden python DLL beim Einbetten von Python + numpy
LNK1194 nicht verzögerungs load 'python36.dll' aufgrund Import des Datensymbols '__imp_PyExc_ImportError'; Link ohne/DELAYLOAD: python36.dll.
Hier ist mein Code:
// Initialize python
Py_Initialize();
// If I remove this line, I am able to build with DELAYLOAD
import_array();
Gibt es eine Möglichkeit Verzögerung Last möglich bei der Verwendung von numpy zu machen?
Alternative Frage: ist es möglich, eine numpy.recarray zu erstellen und mit Daten zu füllen, ohne import_array() aufzurufen?
EDIT: Ich beschloss, import_array() loszuwerden. Hier ist ein Teil des Codes, die ich benutze Python zu initialisieren:
if (!Py_IsInitialized())
{
// Initialize Python
Py_Initialize();
// Initialize threads
PyEval_InitThreads();
// Needed for datetime
PyDateTime_IMPORT;
// Needed to avoid use of Py_None, Py_True, and Py_False;
// which cause inability to use DELAYLOAD
HMODULE pythonDll = GetModuleHandle(L"python36.dll");
if (pythonDll == nullptr)
{
throw gcnew NotSupportedException(L"GS_ERR_CannotInitialize");
}
PythonHelper::_pyNone = (PyObject*)GetProcAddress(pythonDll, "_Py_NoneStruct");
PythonHelper::_pyTrue = (PyObject*)GetProcAddress(pythonDll, "_Py_TrueStruct");
PythonHelper::_pyFalse = (PyObject*)GetProcAddress(pythonDll, "_Py_FalseStruct");
}
Haben Sie versucht, zwei Varianten von Build Release/Debug? Manchmal hilft das. – fghj
Leider konnte ich nicht finden und Debug Build von numpy, so nur mit Release LIB/DLL –
Wie verweisen Sie numpy in Ihrer C++ App? Hast du es aus der Quelle nach numpy Anweisungen gebaut? – denfromufa