1. François Rossignol
  2. PowerBuilder
  3. Monday, 20 November 2017 08:15 AM UTC


In a previous question I found out about Robert Giesecke unmanaged exports which allows to call .net function from PB.

I got it working with longs and strings but can't make it work with arrays and structures.

For example in my VB.net dll I have the following code

    Public Function GetCollectionImprimantes( ByRef liste_imprimantes As String()) As Int32
        Dim ll_ret As Int32
        Dim ll_index As Int32 = 0
        ll_ret = 1

        For Each ls_nom_imprimante As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters
            ll_index += 1
            liste_imprimantes(ll_index) = ls_nom_imprimante

        Return (ll_ret)
    End Function


It's declared in PB 2017 with as a local external function

function long GetCollectionImprimantes(ref string liste[]) library "SFWHelpers.dll"

And used as

string liste[]
this.helpers.GetCollectionImprimantes(ref liste)

When i try to use arrays or structures I've got a PB error message

Error: Error calling external function %s at line ...snip...

The %s is what is actually written in the message

I know that for this peculiar example I can do it in native PB but it's just an example.

I know I could do COM visible dll with regasm (its what I did on the past) but I'd like to avoid that for ease of deployment and updates (thousands of computers, more than a hundred customers, most of them no IT on site)

I could for the side by side manifest but never managed to make it work (PB 12.5 at the time I tried it)


Am I doing it wrong ? Is that a bug I should report to support or maybe it's just not supported.




François Rossignol Accepted Answer Pending Moderation
  1. Monday, 20 November 2017 09:45 AM UTC
  2. PowerBuilder
  3. # 1

After some more testing the error I get does not come from the data type of the argument but because the argument is passed as Reference

Public Function GetCollectionImprimantes() As String will work

where Public Function GetCollectionImprimantes2( ByRef liste_imprimantes As String) As String won't (getting the %s error message)

Still have problems with structures but now it's a different error message (unsupported argument type)

There are no comments made yet.
  • Page :
  • 1

There are no replies made for this question yet.
However, you are not allowed to reply to this question.