当前位置: 首页 > 面试题库 >

带有Powerbuilder生成的DLL的SQL Anywhere中的外部“ ello world”功能

梅安平
2023-03-14
问题内容

我在PowerBuilder.NET Hello World中 创建了一个函数。从PowerBuilder实用程序以C#生成的项目编译为
Helloworld.dll 。在Helloworld中,我制作了非可视的 n_cst_helloworld
。在非可视内部,我创建了对象函数 of_hello() 。这些是我尝试在SQL Anywhere的外部函数中访问
Helloworld.n_cst_helloworld.of_hello() 时遇到的问题。

外部函数使用 CLR, 并且现在在 Interactive SQL中 被调用。

这是我正在尝试通过ASA在iSQL中启动的脚本:

ALTER PROCEDURE  "DBA"."ext_helloworld"()

EXTERNAL NAME

'helloworld.dll::Helloworld.n_cst_helloworld.of_hello( )'

LANGUAGE CLR

然后,我在iSQL中使用以下内容:

START EXTERNAL ENVIRONMENT CLR;

CALL ext_helloworld();

这给了我以下错误:

无法执行语句。过程’ext_helloworld’因未处理的异常’找不到方法’Helloworld.n_cst_helloworld.of_hello’而终止。

SQLCODE = -91

因此,我知道我的对象位于正确的文件夹中,并通过REGASM等进行了注册,否则它将给我以前见过的“找不到对象”错误。

我很困惑,因为似乎SQL
Anywhere知道对象n_cst_helloworld存在,但是它无法识别使用PowerBuilder.NET实用程序生成的方法。我不知道如何继续通过ASA使用此方法。

目前,我正在使用ASA 12,PB12,PB.NET,并且同时安装了3.5和4.0。


问题答案:

.NET部署如何工作

部署.NET项目时,PowerBuilder会将现有或新开发的PowerScript®代码编译到.NET程序集中。

在运行时,生成的.NET程序集使用.NET公共语言运行时(CLR)执行。PowerBuilder的.NET编译器技术与标准PowerBuilder客户端-
服务器应用程序中的P代码编译器一样透明。

部署PowerBuilder运行时文件

将PowerBuilder运行时DLL和.NET程序集部署到生产服务器或目标计算机的最简单方法是使用 PowerBuilder Runtime
Packager

工具。运行时打包程序将创建一个MSI文件,该文件将安装您选择的文件,注册所有自注册DLL,然后将.NET程序集安装到全局程序集缓存(GAC)中。

请参阅 完整的文档PB.NET运行时将
这里上的Sybase信息中心

部署清单

验证生产服务器和目标计算机是否满足运行从PowerBuilder Classic部署的.NET目标的所有要求。

所有.NET目标的清单

为了部署所有.NET目标类型(Windows窗体,Web窗体, .NET程序集 ,.NET Web服务),生产服务器或目标计算机必须具有:

  • Windows XP SP2,Windows Vista,Windows 2008或Windows 7操作系统.NET Framework 4.0
  • Microsoft Visual C ++运行时库msvcr71.dll,msvcp71.dll,msvcp100.dll,msvcr100.dll和Microsoft .NET活动模板库(ATL)模块atl71.dll
  • 全局程序集缓存(GAC)中的PowerBuilder .NET程序集
  • 系统路径中的PowerBuilder运行时动态链接库
  • 请参阅部署PowerBuilder运行时文件。


 类似资料:
  • 问题 你想定义一个生成器函数,但是它会调用某个你想暴露给用户使用的外部状态值。 解决方案 如果你想让你的生成器暴露外部状态给用户, 别忘了你可以简单的将它实现为一个类,然后把生成器函数放到 __iter__() 方法中过去。比如: from collections import deque class linehistory: def __init__(self, lines, hist

  • 我一直在尝试将jar转换为exe。该程序(jar)使用蓝牙库“Bluecove”,这是某个目录中的另一个jar。该程序还使用Java Swing,通常是JFrame等。当从Netbeans或Eclipse中运行时,该程序运行良好。现在是我部署它的时候了,因此我需要将其转换为exe。但我一直无法让最终的可执行文件与“Bluecove”链接。我尝试了JSmooth和Launch4j,但是使用这两个工具

  • 问题内容: 我使用.jar开发一个项目以重用代码。 因此,我在名为TOOLS.jar的.jar上进行了开发,并在文件HelloWorld.java中开发了一个简单的应用程序,该应用程序从TOOLS.jar引用了我的软件包TOOLS。 我使用以下命令行进行编译: 成功,当我想执行我的应用程序时,我使用以下命令(位于C:\ MyApp文件夹中): 成功了,但是我的问题是: 当我有多个外部.jar文件时

  • 我正在我的应用程序(app1)中使用KeyClope(版本8.0.1)作为身份代理。在我的应用程序中,用户可以使用外部idp(谷歌、fb)或从我们的登录页面进行签名。现在,我设置了另一个keyclope实例,并使用OIDC将其配置为IDP。它工作得很好。 如果用户已准备就绪,请登录外部idp(谷歌、fb),并从app2的网页上单击我的应用程序(app1)。有没有办法,我可以自动让用户进入,而不是将

  • 我们曾经有一个包含EJB jar和WAR的EAR。我们从EJB向战争发送了一个dto类。一切都很好。 现在我们已经尝试从EAR中提取WAR,并创建了WAR使用的EJB-client(API jar)。这个API jar包括我们从EJB发送到WAR的dto类。在EAR中,API部署在lib目录中。 在WAR中,我们在WEB-INF/lib目录中有相同的API jar。 但现在我们在访问dto类的内部

  • 我正在学习使用ApacheCamel解决一个消息传递问题,以下几点说明问题的要点。 有一个外部ActiveMQ代理,它需要JSON格式的消息,并返回JSON格式的响应 发送给代理的JSON消息必须在运行时通过从用户获取参数来创建 返回的响应将返回给用户 我发现很难按照书中的例子来解决我的问题。请让我知道如何使用ApacheCamel解决这个问题。 谢谢!