如何从C#DLL绘制到非.Net主机窗口? 我在Delphi 6中有一个应用程序,并且由于库问题,我需要用C语言或C++编写一个以Delphi形式存在的组件。该程序目前是Delphi和C#,它调用C#作为对话框。我需要在TForm中嵌入一些东西,使我能够在C#中绘制该组件

如何从C#DLL绘制到非.Net主机窗口? 我在Delphi 6中有一个应用程序,并且由于库问题,我需要用C语言或C++编写一个以Delphi形式存在的组件。该程序目前是Delphi和C#,它调用C#作为对话框。我需要在TForm中嵌入一些东西,使我能够在C#中绘制该组件,c#,delphi,window,draw,handle,C#,Delphi,Window,Draw,Handle,我想我可以在Delphi中创建一个组件,在它的Paint例程中,我只调用DLL中的函数。但是,我应该向C#DLL传递什么,以便它可以在该窗口中绘制,以及如何让C#实际执行该操作 我想我所需要做的就是在C中按需绘制任意DC# 德尔菲: type intPtrArgs = procedure(hand : hwnd); StdCall; procedure T_CS.RePaint; //extends TWinControl var Hm: HModule; ExtDoIt:

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

我想我所需要做的就是在C中按需绘制任意DC#

德尔菲:

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;
在每种颜料上加载卸载是愚蠢的,但举个例子,它是有效的

对于其他任何试图这样做的人,您需要在谷歌上搜索“Reverse p/Invoke”,以便能够在另一种语言中看到C#DLL过程

反向p/Invoke示例

如果您想回答自己的问题,请在回答中这样做。这不是问题。欢迎来到堆栈溢出。很高兴你找到了问题的答案,但请把它放在下面的“答案”部分。为此,首先单击问题下方的“编辑”链接。选择并剪切“已解决”行下方的所有内容,然后保存编辑。最后,点击页面底部的“回答你的问题”按钮并将答案粘贴到那里。然后你可以得到答案,一段时间后,你可以把你的答案标记为“被接受”的答案。看起来很合理。完成。在编辑模式下,我将问题保留了大约3个小时,因为我要确保它是一个清晰的问题。然后,我在形成问题的过程中偶然发现了答案。他们说:“问问鸭子。”。所以我把它贴在那里。现在是时候了。谢谢
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;