在 C# 中加载 Win32 控件(特别是 WPF)
我编写了一组封装 Delphi 框架的 Win32 dll(请参见下面的代码片段 1),并且可以通过加载 dll 并分配正确的变量(代码片段 2)将它们加载到另一个 Delphi 程序中。我现在希望能够在 C# 中执行相同的操作(我可以在 pinvoke 中加载 DLL,但不确定如何将控件连接到基本 WPF“表单”。
Snippet 1
var
frame : TFrame1;
function CreateFrame(hParent:TWinControl):Integer; stdcall; export;
begin
try
frame := TFrame1.Create(hParent);
frame.Parent := hParent;
frame.Align := alClient;
finally
result := 1;
end;
end;
exports CreateFrame name 'CreateFrame';
Snippet 2
DLLHandle := LoadLibrary('Library/Demo.Frame.dll');
If DLLHandle > 32 then
begin
ReturnValue := GetProcAddress(DLLHandle, 'CreateFrame');
end;
ts1 := TTabSheet.Create(PageControl1);
with ts1 do
begin
PageControl := PageControl1;
Name := 'tsExternal';
Caption := 'External';
Align := alClient;
ReturnValue (ts1);
end;
任何帮助将不胜感激。
I have written a set of Win32 dlls that encapsulate a Delphi Frame (see Snippet 1 below), and can load them into another Delphi program by loading the dll and assigning the right variables (Snippet 2). I now want to be able to do the same thing in C# (I can load the DLL in pinvoke, but am unsure how to connect up the control to the basic WPF 'form'.
Snippet 1
var
frame : TFrame1;
function CreateFrame(hParent:TWinControl):Integer; stdcall; export;
begin
try
frame := TFrame1.Create(hParent);
frame.Parent := hParent;
frame.Align := alClient;
finally
result := 1;
end;
end;
exports CreateFrame name 'CreateFrame';
Snippet 2
DLLHandle := LoadLibrary('Library/Demo.Frame.dll');
If DLLHandle > 32 then
begin
ReturnValue := GetProcAddress(DLLHandle, 'CreateFrame');
end;
ts1 := TTabSheet.Create(PageControl1);
with ts1 do
begin
PageControl := PageControl1;
Name := 'tsExternal';
Caption := 'External';
Align := alClient;
ReturnValue (ts1);
end;
Any help would be greatly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不确定这是否可以完成 - 特别是在使用 WPF 时。您可以尝试将 Delphi 框架转换为 COM 控件,并在您的应用程序中使用它。
I'm not sure whether this can be done - especially when using WPF. You could try to convert your Delphi frame into a COM control and use this from within your application.