使用带有ctypes的DLL的特定实例

时间:2016-08-05 17:51:38

标签: python ctypes

是否可以使用ctypes使用DLL的特定实例?基本上我的申请如下: 我们有一个C DLL,由C#DLL访问,然后是C#WPF前端。我使用ctypes编写了一个单独的包装器来直接访问C DLL并一起绕过C#。

我们目前在程序中使用内部IronPython窗口,允许用户在Python中编写脚本,并连接到中间C#层,然后连接到C dll。由于IronPython的局限性,我想看看是否有可能允许用户编写Python代码,可以使用我的库直接访问C dll,但是它与C#的实例相同,所以它们可以是同步。这甚至可以远程实现吗?

1 个答案:

答案 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中执行此操作并公开它。