从自己的C#中的DLL进展4GL创建COM-对象(Create COM-Object from ow

2019-09-20 07:34发布

我想知道我怎么可以创建我自己的C#DLL一个COM对象。

我在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

然后我试图在进步4GL这个代码:

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

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

有什么建议么? :)

Answer 1:

万一有人还在读这篇文章,答案原来是相当简单:下面一行是错误的。

MESSAGE NetServer::GetString().

它应该是

MESSAGE NetServer:GetString().


Answer 2:

该错误是在create COM手柄声明。 应create "ProgressNet.Server" NetServer. 而不是"ProgressNet.NetServer"由指定的ProgId电话。

我注册与DLL regasm正如你所提到和使用下面的代码来测试它工作得很好。

def var ch as com-handle no-undo.

create "ProgressNet.Server" ch.

MESSAGE ch:GetString()
    VIEW-AS ALERT-BOX INFO BUTTONS OK.


文章来源: Create COM-Object from own C# Dll in Progress 4GL