Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Clipper中的C#调用函数_C#_Clipper - Fatal编程技术网

从Clipper中的C#调用函数

从Clipper中的C#调用函数,c#,clipper,C#,Clipper,我的一个朋友有一个内置于Clipper的应用程序。现在他想在他的应用程序中添加一些新功能,但他不知道如何为其编码。我可以在.net的控制台应用程序中完成他的要求。因此,我在C#中编写了如下函数: 我在main方法的构造函数中调用这个函数。我的程序运行良好 现在,他想从Clipper开发的应用程序中调用这个函数。有人知道如何在C#app和Clipper app之间进行通信吗?如果你想从Clipper本地调用C#例程,那你就倒霉了 另一种方法可能是在中重新编码Clipper应用程序。Vulcan是X

我的一个朋友有一个内置于Clipper的应用程序。现在他想在他的应用程序中添加一些新功能,但他不知道如何为其编码。我可以在.net的控制台应用程序中完成他的要求。因此,我在C#中编写了如下函数:

我在main方法的构造函数中调用这个函数。我的程序运行良好


现在,他想从Clipper开发的应用程序中调用这个函数。有人知道如何在C#app和Clipper app之间进行通信吗?

如果你想从Clipper本地调用C#例程,那你就倒霉了

另一种方法可能是在中重新编码Clipper应用程序。Vulcan是XBase的.NET本机开发环境

否则,可能会有其他技术,但需要更多的细节:例如,您的同事是否正在使用Clipper 5或Harbor等。从Clipper方面获得更多的资源,说明需要什么将是有帮助的。

1º第一步

我在C#中创建了一个类库,并编译了选项,将Register标记为COM互操作

2º类样本

公共阶级秩序

Public Function Total() As Decimal
    Return 100
End Function

Public Property Description As String = "Teste"
末级

港内3度测试 //现在可以在类中使用方法e属性了

包括“minigui.ch” 函数Main()

本地订单

//HarbourInvoke the name of my Class Library in C#
oOrder = CreateObject("HarbourInvoke.Order")

MsgInfo(oOrder:Total())
MsgInfo(oOrder:Description())

oOrder:Description := "new test"

MsgInfo(oOrder:Description())

oSuma := nil
    

Return Nil

他的应用程序的源代码大小是否如此之大?将Clipper应用程序迁移到C#难道没有意义吗?我不知道现在有什么理由使用Clipper而不是C#,除非它是一个大型的遗留应用程序,或者它有更大的客户群,并且担心变化的影响。免责声明:我将一个大型应用程序从Clipper迁移到了C。这是非常值得的努力。是的,应用程序是巨大的。另外,我的朋友不知道C#,因此他无法对应用程序进行新的更改。你不能从clipper调用C#代码,但应该有一种方法运行另一个exe文件,通过clipper传递参数(甚至使用IPC)(询问你的朋友)。例如(不考虑任何安全性),Clipper exe文件可以使用命令行参数执行.net exe文件。或者,您可以使用预定义文件传递参数和/或返回结果等。这取决于您使用的特定供应商变量,例如XBase支持与.Net的COM互操作。你在用什么样的Clipper实现?他不能。但如果他可以运行.NETEXE文件,那么他就可以传递参数(请参阅如何读取参数)。这只是一种方式。另一种易于编程的方法是在文件上进行协商(或作为命令行参数传递),该文件包含输入参数(文本、二进制或序列化形式:xml、ini等)和/或输出文件以返回结果(如果需要)。性能方面最好的方法是IPC:运行.net exe,使用IPC共享导致c#代码执行的内容,获取数据。问题是:克利伯在IPC的表现如何?
//HarbourInvoke the name of my Class Library in C#
oOrder = CreateObject("HarbourInvoke.Order")

MsgInfo(oOrder:Total())
MsgInfo(oOrder:Description())

oOrder:Description := "new test"

MsgInfo(oOrder:Description())

oSuma := nil