是否可以使用ctypes使用DLL的特定实例?基本上我的申请如下: 我们有一个C DLL,由C#DLL访问,然后是C#WPF前端。我使用ctypes编写了一个单独的包装器来直接访问C DLL并一起绕过C#。
我们目前在程序中使用内部IronPython窗口,允许用户在Python中编写脚本,并连接到中间C#层,然后连接到C dll。由于IronPython的局限性,我想看看是否有可能允许用户编写Python代码,可以使用我的库直接访问C dll,但是它与C#的实例相同,所以它们可以是同步。这甚至可以远程实现吗?
答案 0 :(得分:0)
你有一个程序加载一个加载C DLL的C#DLL。同样的程序也运行IronPython,你希望Python加载相同的C DLL。
我假设您在Python中使用// Code Section 1
using (var myImage = Resources.sie_logo_petrol_rgb){
// resize the image to max allowed dimensions (64 x 233)
var resizedImage = Helpers.ResizeImage(myImage, (int)maxWidth, (int)maxHeight); // this code executes with no errors
pictureBox1.Image = resizedImage;
}
// Code Section 2
using (var ReportLogoToUse = Helpers.ReportLogo(filePath)){
// resize the image to max allowed dimensions (64 x 233)
var resizedImage = Helpers.ResizeImage(ReportLogoToUse, (int)maxWidth, (int)maxHeight); // Invalid Parameter error
pictureBox2.Image = resizedImage;
}
public static Bitmap ReportLogo(string filePath){
try{
var myImage = Image.FromFile(filePath, true);
return (Bitmap)myImage;
}
catch (Exception ex){
// use the embedded logo
using (var myResourceImage = Resources.sie_logo_petrol_rgb){
var myImage = myResourceImage;
return (Bitmap)myImage;
}
}
}
。所以你只需要找到正确的道路。对于C#,一些想法在这里:How to get the location of the DLL currently executing?
具体来说,您可以尝试:https://msdn.microsoft.com/en-us/library/system.reflection.assembly.codebase(v=vs.110).aspx
您可以直接从IronPython中执行此操作,但如果没有,您可以在C#DLL中执行此操作并公开它。