External “Hello World” Function in SQL Anywhere with Powerbuilder-generated DLL

浪尽此生 提交于 2019-12-12 10:05:11

问题


I created a function in PowerBuilder.NET Hello World. The project compiled as Helloworld.dll, generated in C# from the PowerBuilder utility. Inside Helloworld, I made the non-visual n_cst_helloworld. Inside the non-visual, I made the object function of_hello(). These are the issues I encountered when trying to access Helloworld.n_cst_helloworld.of_hello() in an external function on SQL Anywhere.

The external function uses CLR and is called in Interactive SQL right now.

Here is the script I'm trying to launch in iSQL (through ASA):

ALTER PROCEDURE  "DBA"."ext_helloworld"()

EXTERNAL NAME

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

LANGUAGE CLR

Then, I use the following in iSQL:

START EXTERNAL ENVIRONMENT CLR; 

CALL ext_helloworld();

Which then gives me the following error:

Could not execute statement. Procedure 'ext_helloworld' terminated with unhandled exception 'Method 'Helloworld.n_cst_helloworld.of_hello' not found.'

SQLCODE = -91

So, I know that I have the object in the correct folder, and registered through REGASM and all that, otherwise it would give me the error of "object not found" that I'd seen before.

I'm confused because it seems that SQL Anywhere knows that the object n_cst_helloworld exists, but it doesn't recognize the methods that were generated using the PowerBuilder.NET utility. I don't know how to proceed to be able to use this method through ASA.

Currently I'm using ASA 12, PB12, PB.NET and have both 3.5 and 4.0 installed.


回答1:


How .NET Deployment Works


When you deploy a .NET project, PowerBuilder compiles existing or newly developed PowerScript® code into .NET assemblies.

At runtime, the generated .NET assemblies execute using the .NET Common Language Runtime (CLR). PowerBuilder’s .NET compiler technology is as transparent as the P-code compiler in standard PowerBuilder client-server applications.

Deploying PowerBuilder runtime files

The simplest way to deploy PowerBuilder runtime DLLs and .NET assemblies to production servers or target computers is to use the PowerBuilder Runtime Packager tool. The Runtime Packager creates an MSI file that installs the files you select, registers any self-registering DLLs, and installs the .NET assemblies into the global assembly cache (GAC).


See full document PB.NET runtimes HERE on Sybase Infocenter


Checklist for Deployment

Verify that production servers and target computers meet all requirements for running the .NET targets that you deploy from PowerBuilder Classic.

Checklist for all .NET targets

For deployment of all .NET target types (Windows Forms, Web Forms, .NET Assembly, .NET Web Service), production servers or target computers must have:

  • The Windows XP SP2, Windows Vista, Windows 2008, or Windows 7 operating system .NET Framework 4.0
  • The Microsoft Visual C++ runtime libraries msvcr71.dll, msvcp71.dll, msvcp100.dll, msvcr100.dll, and the Microsoft .NET Active Template Library (ATL) module, atl71.dll
  • PowerBuilder .NET assemblies in the global assembly cache (GAC)
  • PowerBuilder runtime dynamic link libraries in the system path
  • See Deploying PowerBuilder runtime files.

See full set of deployment checklist documents HERE on Sybase Infocenter




来源:https://stackoverflow.com/questions/18065300/external-hello-world-function-in-sql-anywhere-with-powerbuilder-generated-dll

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!