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

我想知道如何从我自己的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 Interop。

然后我用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的自动化服务器没有正确注册”..

有什么建议? 🙂

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

 MESSAGE NetServer::GetString(). 

它应该是

 MESSAGE NetServer:GetString(). 

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

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

 def var ch as com-handle no-undo. create "ProgressNet.Server" ch. MESSAGE ch:GetString() VIEW-AS ALERT-BOX INFO BUTTONS OK.