C#を使ってラップする例としては、以下のように、dll名自体をclassとするのが良いでしょう。
#using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace UnmanagedCode { public class GDI32 { [DllImport("GDI32.dll")] public static extern IntPtr CreateCompatibleDC(IntPtr hdc); [DllImport("GDI32.dll")] public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight); [DllImport("GDI32.dll")] public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj); [DllImport("GDI32.dll")] public static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); [DllImport("GDI32.dll")] public static extern bool DeleteDC(IntPtr hdc); [DllImport("GDI32.dll")] public static extern bool DeleteObject(IntPtr hObject); } public class User32 { [DllImport("user32.dll")] public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll")] public static extern IntPtr GetTopWindow(IntPtr hWnd); [DllImport("user32.dll")] public static extern IntPtr GetWindow(IntPtr hWnd, uint wCmd); [DllImport("User32.dll")] public static extern IntPtr GetWindowDC(IntPtr hWnd); [DllImport("User32.dll")] public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC); } }
C#で作ったdllを利用するIronPythonは以下のようなパターンとなることでしょう。
「currentmacrodirectory」がなぜ必要かなどは、「C#」で作ったdllの読み込みを参照してください。
import clr import sys # currentmacrodirectoryは秀丸マクロ側から伝達されているものとする sys.path.append(currentmacrodirectory) # dllの名前を拡張子など抜きで clr.AddReferenceByPartialName("UnmanagedCode") clr.AddReference('System.Drawing') from System.Drawing import Bitmap, Image from UnmanagedCode import User32, GDI32 def ScreenCapture(x, y, width, height): hdcSrc = User32.GetWindowDC(User32.GetDesktopWindow()) hdcDest = GDI32.CreateCompatibleDC(hdcSrc) hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height) GDI32.SelectObject(hdcDest, hBitmap) #・・・・