从C#调用PyOjbect *到C ++ DLL创建AccessViolation

时间:2020-07-17 16:49:20

标签: python c# dll unmanaged

我正在使用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”);

抛出的异常是“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

我无法在此处找到问题。任何指针都将真正有用。

0 个答案:

没有答案
相关问题