Python使用pythonnet调用C ++ / CLI dll函数

时间:2018-07-13 15:26:07

标签: c# python .net c++-cli python.net

我已经从Visual Studio中的C ++ / CLI项目中编译了一个dll。

代码如下:

#include "stdafx.h"
#include "api209.h"

using namespace System;
using namespace api209;

namespace CDK_net {

    public ref class CDK_wrapper
    {
   public:
      CDK_wrapper::CDK_wrapper(){};

   public:
      void init(){
         //some magic
      }
    };
}

因此,该dll引用了其他一些本机C ++ dll和库,并在init()函数中做了一些工作。

如果我创建一个C#项目,请引用该dll,CDK_wrapper.init()可以很好地工作。

现在,我想从python脚本中引用此dll。所以我有Python 2.7.15和pythonnet来允许我这样做。

如果我创建一个简单的脚本:

import sys
import clr

dlldir = "C:\\dir\\of\\dll\\"
dllname = "CDK_net"

sys.path.append(dlldir)

clr.AddReference(dllname)

from CDK_net import CDK_wrapper

cdk = CDK_wrapper()
#works fine until here
cdk.init()

在Python中运行时出现以下错误:

Traceback (most recent call last):
  File "test_script.py", line 33, in <module>
    cdk.init()
System.Runtime.InteropServices.SEHException: External component has thrown an exception.
   at api209.model.open(model* , SByte* , Repository* )
   at CDK_net.CDK_wrapper.init() in d:\(...)cdk_net.h:line 21

因此,该错误可追溯到我的C ++ / CLI托管dll所引用的C ++库中的功能。

我的问题是;我的dll中的init()函数中发生了什么,如果在C#应用程序调用时它可以工作,那么是否有任何原因为什么在使用pythonnet被python调用时它不起作用?

0 个答案:

没有答案