繁体   English   中英

在Delphi中将C#或C ++ DLL导入为COM对象

[英]Importing C# or C++ DLL as COM object in Delphi

我对Delphi很新。 我们尝试将C ++或C#dll导入Delphi。 我们的要求是将库导入为COM对象。 由于DLL中有多个类和结构,我们不希望它P / Invoke方法。 我们尝试用C ++ / C#和MFC ActiveX(ocx组件)构建DLL。 我一直在关注这些链接来创建一个DLL:

和这个链接( http://wiki.freepascal.org/LazActiveX )导入我创建的TLIB。 我创建的所有DLL都停止在Delphi中创建对象的停止点。

我在C#中创建的那个是:

using System;
using System.Runtime.InteropServices;
using System.IO;
using System.Text;
using System.Threading.Tasks;

namespace CSharpSampleLib
{
    [ComVisible(true),
    Guid("CDBFD892-7473-4AC4-8B44-D75A828599AD")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ICSharpCom
    {
        [DispId(1)]
        void Init();
        [DispId(2)]
        int AddNumbers(int num1, int num2);
        [DispId(3)]
        String StringConcat(String num1, String num2);

    }



   [Guid("D51F086B-B593-436D-8900-92CDC1E427CE"),
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface CSharpCom_Events
    {
    }
    [Guid("4AB74C5C-6F3C-4B15-9E00-5174551B50A2"),
    ClassInterface(ClassInterfaceType.None)]
    [ProgId("Sample.CSharpCom")]
    [ComVisible(true)]
    public class CSharpCom : ICSharpCom
    {
        public CSharpCom() { }
        public void Init() { }

        public int AddNumbers(int num1, int num2) 
        {
            return num1 + num2;
        }
        public String StringConcat(String str1, String str2) 
        {
            return str1 + str2;
        }
    }
}

我们尝试了两个选项来调用我们导入的Type库。

program CSharpDemo;

uses comobj, CSharpSampleLib_1_0_TLB;
var
  objCsLib1:ICSharpCom;
  objCsLib2:OLEVariant;

begin
  objCsLib1:=CoCSharpCom.Create; // Method 1
objCsLib2:= CreateOleObject('CSharpSampleLib.CSharpCom'); //Method 2
end.

方法1给出: 在此输入图像描述 方法2给出: 在此输入图像描述

我们确保已注册库,并在Wow6432Node> CLSID>中找到GUID 在此输入图像描述

我希望这是创建对象的正确方法。 我可以知道我在这里缺少什么吗?

- (VS)项目选项>应用程序>装配信息>检查装配COM是否可见?

- (VS)项目选项>构建>注册COM Interop已检查?

- 注册RegAsm.exe?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM