从自己的 C# Dll in Progress 4GL 创建 COM-Object

Posted

技术标签:

【中文标题】从自己的 C# Dll in Progress 4GL 创建 COM-Object【英文标题】:Create COM-Object from own C# Dll in Progress 4GL 【发布时间】:2012-07-27 12:43:24 【问题描述】:

我想知道如何从我自己的 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 的自动化服务器未正确注册”..

有什么建议吗? :)

【问题讨论】:

错误信息非常明确。你如何使用 regasm 的描述不是。 regasm G:\ProgressTestApp\ProgressNet.dll /tlb:G:\ProgressTestApp\ProgressNet.tlb 添加 /codebase 选项,这样您就不必将程序集放在 GAC 中。 嗨伙计,你最后是如何处理这段代码的? @John 我不明白你的问题。你想知道什么? :) 【参考方案1】:

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

MESSAGE NetServer::GetString().

应该是

MESSAGE NetServer:GetString().

【讨论】:

【参考方案2】:

错误在create com-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.

【讨论】:

以上是关于从自己的 C# Dll in Progress 4GL 创建 COM-Object的主要内容,如果未能解决你的问题,请参考以下文章

c#编组尝试将结构从cpp dll返回到c#应用程序,该应用程序被分配为它自己的dll

c# 如何用using引入 process 类

PHP上传进度支持(Upload progress in sessions)

HALCON error #7990: DL: The DL module (libhalcondl.so/halcondl.dll) could not be loaded in operator

MFC dll 中的访问冲突(用 C++/CLI 包装)从 C# 程序开始

如何使用 ODBC 驱动程序从 C# 调用 Progress Openedge .p 文件?