I have a need to create a dll that can be called from PowerBuilder 12.5. I found the RGiesecke.DllExport page at https://sites.google.com/site/robertgiesecke/Home/uploads#TOC-Samples. I created the following very simple c# project as a console app and in the wizard I selected dll:
VS2013 framework 3.5
Windows 7
using System;
using System.Collections.Generic;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace PRS
{
internal static class UnmanagedExports
{
[DllExport("getsmoochie", CallingConvention = CallingConvention.StdCall)]
static string GetSmoochie()
{
return "Success";
}
}
}
I compile in Release mode as 32bit then attempt to access the dll from PowerBuilder with:
Function string GetSmoochie() library "PRS.dll"
I get back what looks like Chinese characters.
In addition I find one thing a little strange: if I try to register the dll with Regsvr32 I get and error telling me there is no dll entry point. I don't know what to think of that.
I have additional dll needs for PowerBuilder but I can't seem to get the simplest thing to work. Any help would be appreciated.
Thank you.
UPDATE:
It occurred to me that getting a mangled string back might not be a problem in this case since the code I really need to execute sends a file to a web service so I implemented the SendFile() code and it works from PowerBuilder.
One change I did make from the code above was to add the keyword "public" to the method call.
Summation: the RGiesecke dll Export template works!
UPDATE: See my note below. Here is my call with the filename passed in:
[DllExport("sendfile", CallingConvention = CallingConvention.StdCall)]
public static long SendFile(String filename)
Since the code with the file name hard-coded works I have to assume the file name is getting mangled somehow and the dll can't fin it.
Any ideas?