带有Powerbuilder生成的DLL的SQL Anywhere中的外部“Hello World”函数

时间:2013-08-05 18:37:59

标签: sql dll clr powerbuilder sqlanywhere

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

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

这是我试图在iSQL中启动的脚本(通过ASA):

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。

1 个答案:

答案 0 :(得分:1)

.NET部署的工作原理


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

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

部署PowerBuilder运行时文件

将PowerBuilder运行时DLL和.NET程序集部署到生产服务器或目标计算机的最简单方法是使用 PowerBuilder运行时打包程序工具。 Runtime Packager创建一个MSI文件,用于安装您选择的文件,注册任何自注册DLL,并将.NET程序集安装到全局程序集缓存(GAC)中。


在Sybase信息中心查看完整文档PB.NET运行时 HERE


部署清单

验证生产服务器和目标计算机是否满足运行从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运行时文件。

在Sybase信息中心上查看完整的部署清单文档 HERE