1. Hansi Strydom
  2. PowerBuilder
  3. Monday, 8 April 2019 10:10 PM UTC

Hi all

I just wanted to find out if anyone else has run into a similar issue as mine, and if so, how to get around this.

I am doing development on an app which was originally written in Powerbuilder 8, and which interacts with a serial device via COM port. The compiled version of the Powerbuilder 8 app runs on Windows 10 and can correctly interact with the COM port.

However, the same code compiled in Powerbuilder 17 (the Powerbuilder 8 workspace was converted to Powerbuilder 17) when running on the same machine as the Powerbuilder 8 version accessing the same COM port fails. I am not sure if something has changed in terms of COM port communications between the Powerbuilder versions, or whether the same COM port interaction needs to be done differently in Powerbuilder 17.

The extract of the code where it fails is as follows:

if BuildCommDCBA( ConnectString, istr_DCB_used ) = 0 then
    MessageBox( "Communications Error ...", "Open ("+as_CommPort+") failed: Could not build Device Control Block." &
    + "~nPlease check setting string: [" + ConnectString + "].~n" + getpreviouserror() )
    return const_il_invalidhandle
end if

if SetCommState( il_handle, istr_DCB_used ) = false then
    MessageBox( "Communications Error ...", &

    "Set State [" + string(as_CommPort) + "] failed.~nPlease check setting string: [" &
    + ConnectString + "].~n" + GetPreviousError() )
    ClosePort()
    return const_il_invalidhandle
end if

The code fails when it gets to the SetCommState() call, and through investigation and debugging in Powerbuilder 8 and Powerbuilder 17, it is clear that in Powerbuilder 17, the istr_DCB_used structure does not get populated with the values in ConnectString and consequently, the code fails when it gets to the SetCommState() call because the structure has not been populated with the necessary values.

The value of ConnectString is like this "baud=1200 parity=N data=8 stop=1". I might have the baudrate wrong, but the rest is correct, and the value of ConnectString is identical in both compiled versions.

The BuildCommDCBA and SetCommState functions are both external Windows functions, and the declarations for these in the Powerbuilder source code are as follows:

Function long BuildCommDCBA ( string lpDef, REF istr_DCB lpDCB) library "kernel32" alias for "BuildCommDCBA;Ansi"


Function boolean SetCommState (long hCommDev, REF istr_DCB lpDCB) library "kernel32" alias for "SetCommState;Ansi"

The istr_DCB_used structure structure has the following layout:

long dcblength
long baudrate
integer varwords
character bytesize
character parity
character stopbits
character xonchar
character xoffchar
character errorchar
character eofchar
character evtchar
long wreserved1

When this app was originally created it was obviously for a version of Windows older than Windows 10, but as far as I can see the signatures of the external functions have not changed for Windows 10.

 

I see that according to the Microsoft API documentation for the BuildCommDCBA function, there are additional properties in the structure that are not in the structure above. I have tried adding all of them, but that did not resolve the error either, and remember that the problem in this case is not that the app does not work on Windows 10, but rather that the Powerbuilder 8 version of the app works on Windows 10, but not the same code converted to Powerbuilder 17, which is really puzzling.

I will really appreciate any assistance in solving this conundrum.


Responses (2)
  1. Likes
  2. Latest
  3. Oldest
Loading...

Find Questions by Tag

.EXE .NET 6.0 .NET Assembly .NET Core 3.1 .NET Core Framework .NET DataStore .NET Std Framework 32-bit 64-bit ADO.NET AEM AI Algorithm Amazon AWS Android Apache API APK App Store App Store (Apple) Appeon Workspace Appeon Xcelerator Plug-in Architecture Array ASE Asynchronous Methods Authentication AutoBuild AutoCompiler Automated Testing Automation AutoScript Azure Barcode Base64 Batch BigData BLOB Branch & Merge Browser Bug Build Button C# C# Class Importer C# Editor C# Model generator Calendar Camera Certificate Chrome Citrix Class Client Client/Server Cloud Cluster Collection COM Command Line Compiler Compression Computed Field Configuration Controls Cookies Cordova Crash Cross-Platform Crosstab CSharpAssembly CSharpObject CSS CSV Cursor Data Database Database Driver Database Painter Database Profile Database Provider DataObject DataSource DataStore DataStore (C#) DataStore (PS) DataType DataWindow DATE DATETIME DB2 Debug Debugger Debugging Deployment Design DLL DO-WHILE Dockable Docker Documentation DOUBLE Download DragDrop Edge Edit Style Editor Elevate Conference Email Embedded SQL Emulator Encoding Encryption Enhancement Request Entity Entity Framework ERP Error Event Event Handler Event Handling Excel Exception Export Expression External Functions F# Field File File Access Filter Firefox Firewall Font FOR-NEXT Foreground Format Function Garbage Collection GeoLocation Git Graph HANA Hash Header HTML/5 HTTP/S HTTPClient Icon IDE Identity IIS IMAPI Import InfoMaker Inheritance Installation Integer IntelliSense Interface Internet Internet Explorer iOS IPA iPad iPhone IWA J# Java JavaScript JBoss JDBC JOIN JSON JSONGenerator JSONParser Kestrel Label Lambda Large File LDAP Library License LINQ Linux OS Load Balancing Localization Localized PBVM Log In Log Out Logging LONG LONGLONG macOS MAPI Maps MDI Memory Memory Leak Menu Merge MessageBox Messagging Method Migration MIME TYPE Mobile Model ModelStore ModelStore (C#) MSOLEDBSQL Multi Threading MVC MySQL n-Tier Namespace NativePDF NVO OAuth ODATA ODBC Office Offline OLE OLEDB Online Open Source OpenAPI OpenSSL Oracle OrcaScript Other Outlook Output Package Parameter Patch PayPal PB Classic PB Native PB.NET PBC PBD PBDOM PBG PBJVM PBL PBNI PBORCA PBVM PBX PDF Performance Permission PFC Picture Pipeline Play Store (Google) Plugin Popup Port POST PostgreSQL PowerBuilder PowerBuilder (Appeon) PowerBuilder (SAP) PowerBuilder Compiler PowerBuilder Runtime PowerClient PowerScript (PS) PowerScript IDE PowerScript Migrator PowerServer PowerServer Mobile PowerServer Toolkit PowerServer Web PowerServerLabel Print Properties Proxy Publish PULL PUSH Query Regression Release Renew Resize Response REST Retrieve RibbonBar RibbonBar Builder Rich Text Roadmap RPC Runtime Packager SaaS Scaffolding Script SDI SDK Security Server Service Session Single Sign-on Size SMTP SMTPClient SnapDevelop SOAP Sort Source Code Speech Recognition SQL SQL Anywhere SQL Server SqlBuilder SqlExecutor SQLite SqlModelMapper Storage Stored Procedure Subscription SVN Swagger Syntax TabbedBar TabbedView Tablet TabPage Target TE Control Testing Text TFS Theme TIME Timer TLS/SSL Tomcat TortoiseGit TortoiseSVN Transaction Transparency Trial Trigger TRY-CATCH TX Control Type UI ULONG UltraLite Uninstall Unit Test Unit Testing UNIX OS Update Upgrade Upload URL User Center User Object UWP Validation VARCHAR Variable Versioning Visual Studio Visual Studio Code VM Voice Warning WCF Web API Web Extensions Web Service WebBrowser WebForms WebLogic WebSphere WildFly WinAPI Window Windows OS WinForms Wizard Workgroup Workspace WPF XCODE XHTML XML Zoom

Helpful?

If a reply or comment is helpful for you, please don’t hesitate to click the Helpful button. This action is further confirmation of their invaluable contribution to the Appeon Community.