如何解决是否可以在C#应用程序中调用CFFI生成的WindowsC / C ++DLL,而无需在本地开发计算机上安装Python
问题声明:从Python(CFFI)生成的DLL(C / C ++)要求Python环境以C#代码执行。
已完成研究,直到日期:
-
尝试使用.exe方法-Windows执行文件的Python代码-庞大的文件集(例如:Hello world,其中一行程序的文件大小约为12MB)被创建且不可靠。
-
试图在VS C#项目中运行DLL-给出无法加载DLL的错误-找不到模块。
期望:DLL(或使用它的应用程序)不应具有Python Environment依赖性。 我的意思是我想避免在每台机器上显式安装Python,而我的.Net应用程序[将在内部使用/使用从Python(CFFI)生成的DLL(C / C ++)]将要运行/执行。
Python到C / C ++ DLL 我遵循的步骤使用Python中的CFFI模块创建C / C ++ DLL,以下是参考代码:
import cffi
ffibuilder = cffi.FFI()
ffibuilder.embedding_api("""
int do_stuff(int,int);
int do_stuff_Sub(int,int);
""")
ffibuilder.set_source("my_plugin_np2","")
ffibuilder.embedding_init_code("""
from my_plugin_np2 import ffi
import numpy as np
from test_np import *
from test_np_sub import *
@ffi.def_extern()
def do_stuff(x,y):
print("adding %d and %d" % (x,y))
z=Addition.add(2,4)
print(z)
return x + y
@ffi.def_extern()
def do_stuff_Sub(x,y):
print("Subtracting %d and %d" % (x,y))
print(np.add(2,3))
z=Addition.add(2,Subtraction.Addition(4,5))
print(z)
return x - y
""")
ffibuilder.compile(target="npplugin2-1.5.*",verbose=True)
从C#调用C / C ++ DLL 下面是从托管代码调用非托管代码的代码
[DllImport(@"EntryPoint-1.5.dll",CallingConvention = CallingConvention.Cdecl)]
static extern int do_stuff(int x,int y);
[DllImport(@"EntryPoint-1.5.dll",CallingConvention = CallingConvention.Cdecl)]
static extern int do_stuff_Sub(int x,int y);
static void Main(string[] args)
{
int a = do_stuff(20,30);
Console.WriteLine("a=" + a);
int c = do_stuff_Sub(20,10);
Console.WriteLine("c=" +c);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。