- Aubrey Eichel
- PowerBuilder
- Thursday, 3 May 2018 10:42 PM UTC
Our PowerBuilder application is 2017 Build 1666 on Windows 7. We have also tried this in PowerBuilder 12.5.1, unsuccessfully.
We are implementing new functionality that will require us to implement a dll. We are creating the dll using the minGW version gcc version 6.3.0 (MinGW.org GCC-6.3.0-1) (although we have also tried it in Visual C with the same results) compiler. When we test the dll using a test C program compiled with the same compiler, everything works fine. However, when we call it from PowerBuilder we get an error number 15 with the message “Error calling external function test2;Ansi” …
We have created our test based on the “Passing strings” example in the Application Techniques document in the Using External Functions… section.
It appears that we are doing everything as suggested so are wondering if anyone has run into this situation and knows what little (or large embarrassing) thing we’ve missed, either in our PowerBuilder definition or the dll itself.
The dll itself contains two functions. The first returns a string and has no arguments. The second function returns a string and has a single string as an argument. Both functions cause the above error. We have tried several different datatypes and as long as an argument is defined, we get the same error.
The PowerBuilder Local External Function declarations are (we have also tried it without the Alias):
FUNCTION string test1 () LIBRARY "testdll.dll" alias for "test1;Ansi"
FUNCTION string test2 (string InString) LIBRARY "testdll.dll" alias for "test2;Ansi"
The PowerBuilder logic that executes these functions is:
String ls_InString = 'Test Executed Successfully'
String ls_Return
ls_Return = test1 () // This is successful
ls_Return = test2 (ls_InString) // This is not
The C code is:
#include
#include
#include "testdll.h"
__stdcall char* test1(void)
{
return "Testing 1...";
}
__stdcall char* test2(char *s)
{
return "Test 2";
}
Although everything we have read indicates we should use __stdcall, if we remove the __stdcall, or change it to __cdecl, test1 without an argument functions correctly and test2 with the argument returns an error number 42 indicating that the datatypes of the argument are mismatched.
Any suggestions you have will be greatly appreciated. Thanks in advance for your assistance.
Aubrey
Find Questions by Tag
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.