我正在使用C#WPF应用程序,该应用程序加载了C ++ DLL代码(由我编写)。 C ++代码依次尝试加载Python文件以访问其功能。我面临的问题是当我调用代码时 “ PyObject_GetAttrString”。我在网上找不到类似的问题。
DLL头 --- dllheader.h ---
#ifndef PYINTF_H_INCLUDED
#define PYINTF_H_INCLUDED
#include <Python.h>
#include <iostream>
extern "C" {
__declspec (dllexport) void PyCallerFunction (int inVal);
}
#endif
DLL cpp文件--- dllfunctions.cpp ----
void PyCallerFunction(int val)
{
PyObject *pPyFileName, *pModule, *pModuleDict, *pFirstFunc, *pSecondFunc, *pArgs, *pValue1, *pValue2;
Py_Initialize();
pPyFileName = PyUnicode_FromString("E:\myfolder\PyFn.py");
pModule = PyImport_Import(pPyFileName);
pAccessFunc = PyObject_GetAttrString(pModule, "PyAccessFunction"); // <-- Access Violation
Py_Finalize();
return (val);
}
然后在C#WPF应用程序中,我触发一个线程来调用DLL。
[DllImport("PyInterface.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void PyCallerFunction(int afile);
public void DLLThread ()
{
int val = 10;
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send,
new Action(() => PyCallerFunction(val)));
}
此行触发AccessViolation
pAccessFunc = PyObject_GetAttrString(pModule,“ PyAccessFunction”);
抛出的异常是“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”
我无法在此处找到问题。任何指针都将真正有用。