我已经从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调用时它不起作用?