2

我想知道如何从我自己的 C# DLL 创建一个 Com-Object。

我在 C# 中创建了以下类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ProgressNet
{
    [Guid("a9b1e34d-3ea3-4e91-a77a-5bcb25875485")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    [ProgId("ProgressNet.Server")]
    public class NetServer
    {
        public NetServer() {}

        [DispId(1)]
        public string GetString()
        {
            return "Some String";
        }
    }
}

在属性中,我检查了注册 COM 互操作。

然后我用 regasm 注册了 DLL。

regasm G:\ProgressTestApp\ProgressNet.dll /tlb:G:\ProgressTestApp\ProgressNet.tlb /codebase

然后我在Progress 4GL中尝试了这段代码:

DEFINE VARIABLE NetServer AS COM-HANDLE.
CREATE "ProgressNet.NetServer" NetServer.  
MESSAGE NetServer:GetString().

但后来我得到“ProgressNet.NetServer 的自动化服务器未正确注册”..

有什么建议么?:)

4

2 回答 2

1

万一有人还在读这篇文章,答案很简单:以下行是错误的。

MESSAGE NetServer::GetString().

它应该是

MESSAGE NetServer:GetString().
于 2013-03-20T15:34:03.810 回答
1

错误在createcom-handle 语句中。它应该是create "ProgressNet.Server" NetServer.而不是调用"ProgressNet.NetServer"指定的ProgId

regasm我按照您提到的那样注册了 DLL,并使用下面的代码进行测试,它工作正常。

def var ch as com-handle no-undo.

create "ProgressNet.Server" ch.

MESSAGE ch:GetString()
    VIEW-AS ALERT-BOX INFO BUTTONS OK.
于 2017-06-03T21:26:59.427 回答