C# 号角9 Windows mobile/Web开发

C# 号角9 Windows mobile/Web开发,c#,ajax,dll,windows-mobile,clarion,C#,Ajax,Dll,Windows Mobile,Clarion,嗨,我有两个问题: 我目前正在为一个我需要做的项目学习号角。目前,我正在研究扫描仪和clarion作为windows mobile应用程序的语言 我遇到的第一个问题是关于第三方供应商(如Opticon scanners DLL和普通c#net DLL)的clarion with SDK DLL的使用,我如何在clarion中使用/访问这些DLL并在代码中调用它们。我已经做了大量的搜索来寻找上述问题的答案,但是找不到任何有用的答案 第二个问题:Clarion可以使用Clarion提供的应用程序代理

嗨,我有两个问题:

我目前正在为一个我需要做的项目学习号角。目前,我正在研究扫描仪和clarion作为windows mobile应用程序的语言

我遇到的第一个问题是关于第三方供应商(如Opticon scanners DLL和普通c#net DLL)的clarion with SDK DLL的使用,我如何在clarion中使用/访问这些DLL并在代码中调用它们。我已经做了大量的搜索来寻找上述问题的答案,但是找不到任何有用的答案

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

function icAjaxSubmit(controlValue)
{
    getContent(form.action+"? @"+$('#ClarionForm').serialize()+"&"controlValue+"="+$('#'+controlValue).value);
}
问题是,我在互联网上找不到与此相关的任何内容,也找不到clarion目录和应用程序目录中生成的文件,我注意到,它也不在项目代码中

有人可能知道第一个问题或第二个问题的可能解决方法吗

谢谢
吉迪恩

首先让我把这件事弄清楚。如果你能使用号角以外的任何其他语言,就去做吧。Clarion是一个死胡同的开发平台,它的规模无法满足企业的需求。Clarion本身缺乏很多内置功能,这意味着您要么需要花费数千美元购买第三方工具,要么学习Windows API,此时您最好选择C。更不用说第三方工具往往会失去支持,无法升级以满足Clarion更高版本的需要

然而,如果你决定使用号角是必要的

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

最佳情况下,您可以访问C#DLL的源代码,在这种情况下,您可以修改源代码并实现Robert Giesecke的非托管导出包

使用此软件包,您可以在C#库中注释要导出到dll中的特定函数,以便本机应用程序可以调用它们

最坏的情况是第三方C#DLL,您无法访问其源代码。你可以试着遵循这个指南

第二个问题是由于语法错误,这里的代码中缺少一个串联运算符

“&”控制值

整个呼吁应该是:

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

首先让我把这件事弄清楚。如果你能使用号角以外的任何其他语言,就去做吧。Clarion是一个死胡同的开发平台,它的规模无法满足企业的需求。Clarion本身缺乏很多内置功能,这意味着您要么需要花费数千美元购买第三方工具,要么学习Windows API,此时您最好选择C。更不用说第三方工具往往会失去支持,无法升级以满足Clarion更高版本的需要

然而,如果你决定使用号角是必要的

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

最佳情况下,您可以访问C#DLL的源代码,在这种情况下,您可以修改源代码并实现Robert Giesecke的非托管导出包

使用此软件包,您可以在C#库中注释要导出到dll中的特定函数,以便本机应用程序可以调用它们

最坏的情况是第三方C#DLL,您无法访问其源代码。你可以试着遵循这个指南

第二个问题是由于语法错误,这里的代码中缺少一个串联运算符

“&”控制值

整个呼吁应该是:

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

号角实际上并不是上面提到的。我不会浪费时间解释原因的。知道为什么的人,知道为什么。回到现实

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

原型:

(BSTRING)、BSTRING、PASCAL、RAW、DLL(TRUE)

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

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

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

导出Clarion程序/功能时