我在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。
答案 0 :(得分:1)
部署.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服务),生产服务器或目标计算机必须具有:
在Sybase信息中心上查看完整的部署清单文档 HERE