从自己的 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
PHP上传进度支持(Upload progress in sessions)
HALCON error #7990: DL: The DL module (libhalcondl.so/halcondl.dll) could not be loaded in operator