C#
public static void DoIt(IntPtr srcWindow)
{
Graphics g = Graphics.FromHwnd(srcWindow);
g.DrawLine(new Pen(Color.Red), new Point(0, 0), new Point(400, 400));
}
德尔福:
type
intPtrArgs = procedure(hand : hwnd); StdCall;
procedure T_CS.RePaint; //extends TWinControl
var
Hm: HModule;
ExtDoIt: intptrArgs;
begin
Hm := LoadLibrary(pchar('my.dll'));
try
@ExtDoIt := GetProcAddress(Hm, 'DoIt');
ExtDoIt(Handle);
finally
FreeLibrary(Hm);
end;
end;
在每种油漆上加载卸载是很愚蠢的,但例如,它可以工作。
对于尝试执行此操作的其他人,您将需要搜索“反向 P/Invoke”,以便能够以另一种语言查看 C# DLL 过程。
反向 P/Invoke 示例
http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm