1

你好我有2个问题:

我目前正在为我需要做的项目学习号角。目前我正在研究扫描仪和号角作为 Windows 移动应用程序的语言。

我遇到的第一个问题是关于使用来自 3rd 方供应商的 SDK DLL 的 clarion,例如 Opticon 扫描仪 DLL 和普通的 c#.net DLL,我如何在 clarion 中使用/访问这些 DLL 并在代码中调用它们。我已经完成了大量搜索关于上述问题的答案,但找不到任何非常有用的东西。

第二个问题:Clarion 可以通过 Web 浏览器使用普通的 clarion 和 clarion 提供的应用程序代理和骨架,在 clarion 9 中,我创建了一个应用程序,但在浏览器中创建和运行应用程序后,我立即收到由 clarions 自生成代码创建的主屏幕上的错误。错误是下面的段中缺少加号的“未捕获的语法错误:意外标识符”。

function icAjaxSubmit(controlValue)
{
    getContent(form.action+"? @"+$('#ClarionForm').serialize()+"&"controlValue+"="+$('#'+controlValue).value);
}

问题是我在互联网上找不到与此相关的任何内容,也找不到从 clarion 目录和应用程序目录中生成的文件,它也不在我能注意到的项目代码中。

任何人可能对第一个问题或第二个问题的可能解决方法有所了解?

谢谢吉迪恩

4

2 回答 2

2

首先让我解决这个问题。如果您可以使用除 clarion 之外的任何其他语言,那就去做吧。Clarion 是一个死胡同的开发平台,它无法扩展以满足企业的需求。Clarion 本身缺乏很多内置功能,这意味着您要么需要花费数千美元购买第三方工具,要么学习 Windows API,此时您不妨选择 C。更不用说经常使用第三方工具了次失去支持,并且不会升级以满足 Clarion 更高版本的需求。

但是,如果您认为有必要使用 Clarion...

回答你的第一个问题。C# .NET dll,不能由 clarion 本机调用,因为 .NET dll 与标准 Windows 非托管 dll 的格式不同。但是您可以通过一些小的修改来访问它们。

最佳情况下,您可以访问 C# dll 的源代码,在这种情况下,您可以修改源代码并实现 Robert Giesecke https://www.nuget.org/packages/UnmanagedExports的非托管导出包

使用这个包,您可以注释 C# 库中的特定函数以导出到 dll 中,以便本机应用程序可以调用它们。

最坏的情况是这些是您无权访问源代码的第 3 方 C# dll。您可以尝试按照本指南http://www.codeproject.com/Articles/37675/Simple-Method-of-DLL-Export-without-C-CLI

您的第二个问题是语法错误的结果,您在此处的代码中缺少连接运算符

"&"controlValue

整个调用应该是:

function icAjaxSubmit(controlValue)
{
    getContent(form.action+"?@"+$('#ClarionForm').serialize()+"&" + controlValue+"="+$('#'+controlValue).value);
}
于 2014-12-04T20:00:00.680 回答
2

Clarion 实际上不是上述任何一种。我不会浪费时间解释原因。知道为什么的人,就知道为什么。回到现实。

成功调用外部 DLL(例如那些用 Clarion 以外的语言编写的)与在外部 DLL 中调用的过程/函数的 PROTOTYPE 声明有很大关系。在 Clarion 中,接收字符串参数并返回一个外部函数的典型 PROTOTYPE 是:

原型:

(BSTRING),BSTRING,PASCAL,RAW,DLL(TRUE)

重要的是使用 LibMaker.exe 从 DLL 创建一个 .LIB 文件,该文件通常位于 Clarion 的 BIN 文件夹中。打开 DLL,并将 .LIB 与 DLL 一起保存到项目文件夹中。然后将 .LIB 文件添加为项目的资源之一,当您在 Clarion 应用程序中声明过程/函数调用时,确保“模块”指向您包含在项目中的“.Lib”文件。为此,您可以将视图从“Procedure”切换到“Module”,定位您声明的过程,并将其模块更改为指向 Lib。

保存项目后,继续删除与 Clarion 项目关联的 .MAP 文件,重新打开、生成、运行。

上面提到的一点非常非常有用,就是在您可能编写的任何 .NET 代码(例如,在 C# 中)中使用“非托管导出”库,这将允许您在 Clarion 调用之间“编组”数据类型到 . NET 类库,并返回正确的数据类型。

将 Clarion 过程/函数导出到 .NET(或任何其他语言)时,请务必特别注意调用应用程序中过程/函数名称的“大小写”——它必须与它的确切大小写匹配在 Clarion 应用程序中声明。

最后,不要被上面的“&”注释所左右——“&”只不过是 C# 或 VB.NET 等语言中等效的“+”连接符,真的不值得关注;知道你可以,在 DLL 中导出 Clarion 功能,或者使用外部 DLL(.NET 或不调用 .NET DLL 时,(d) 注意将 Clarion 功能提供给外部语言(如 C# 或 Delphi)时的大小写。

于 2016-05-07T09:22:14.423 回答