你能告诉我.NET组件是否可以与Delphi 2009一起使用,如果有的话,请你给我发一些示例代码。
提前致谢。
答案 0 :(得分:6)
答案 1 :(得分:3)
是的,可以在win32程序中使用.net组件。不幸的消息是,做自己并不是很简单,我强烈推荐Hydra。
答案 2 :(得分:3)
有几种方法可以做到这一点,而传统的COM / Interop只是一种方法。
另一种方法是使用CLR中内置的现有基础结构来支持COM / Interop和混合模式C ++ / CLI。
幸运的是,我已经在另一个论坛回答了一个非常类似的问题。所以我已经有了一些示例代码。 ; - )
我在这里展示的可能不是你的一杯茶。
在一天结束时,我不会自己使用经典COM。除非它真的有意义。 (就像为办公室编写COM-Addins一样)
在VisualStudio中,您可以使用重构/提取界面向导从组件中获取具有所需方法的界面。
您需要提供这3个属性
[ComVisible(true)]
[Guid("Create a GUID yourself"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IYourInterface
为了保持简单,我假设你的组件只有一个简单的方法。 在VisualStudio中创建一个类库,并按照其他页面中的步骤操作。 (为了能够导出功能)
[ComVisible(true)]
[Guid("Create a GUID yourself"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IYourInterface
{
void DoSomething(int value);
}
public class YourComponent : IYourInterface
{
public void DoSomething(int value)
{
return value + 1;
}
}
static class Exports
{
[DllExport("createyourcomponent")]
public static void CreateInstance([MarshalAs(UnmanagedType.Interface)]out IYourInterface instance)
{
instance = new YourComponent();
}
}
在Delphi中,如果您愿意,可以将此接口包装在组件中。 这将隐藏.Net涉及的事实:
type
IYourInterface = interface
['{Create a GUID yourself}']//Control+Shift+G in Delphi
// important, safecall is used by COM/Interop
procedure DoSomething(aValue : Integer); safecall;
end;
TYourComponent = class(TComponent)
private
fInnerInstance : IYourInterface;
public
procedure DoSomething(aValue : Integer);
constructor Create(aOwner : TComponent);
end;
implementation
procedure CreateManagedInstance(out aInstance : IYourInterface);
stdcall; external 'YourDotNetLibraryName'
name 'createyourcomponent';
constructor TYourComponent.Create(aOwner : TComponent);
begin
inherited Create(aOwner);
CreateManagedInstance(fInnerInstance);
end;
procedure TYourComponent.DoSomething(aValue : Integer);
begin
fInnerInstance.DoSomething(aValue);
end;
免责声明:我没有IDE方便,因此示例代码中可能存在拼写错误或其他错误...
答案 3 :(得分:1)
您可以将.NET组件与Delphi for .NET一起使用,这是RAD工作室的一部分