如何从 C# DLL 绘制到 non-.Net 主机窗口



我在Delphi 6中有一个应用程序,由于库问题,我需要用C#或C++编写一个将存在于Delphi表单上的组件。该程序目前是Delphi和C#,它为对话框调用C#。我需要嵌入到 TForm 中的东西,以便我用 C# 绘制该组件。

我想我可以在 Delphi 中创建一个组件,在其Paint例程中,我只需在 DLL 中调用该函数。但是,我应该传递给 C# DLL 什么,以便它可以在该窗口中绘制,以及如何让 C# 实际执行此操作?

我想我只需要能够在 C# 中按需绘制一些任意 DC 即可。

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/调用示例http://www.blong.com/Conferences/BorConUK2002/Interop1/Win32AndDotNetInterop.htm

相关内容

  • 没有找到相关文章

最新更新