You've got very little chance of calling that function.
For a start your current code can't hope to succeed since I presume string
is std::string
. That's a C++ data type which Delphi code cannot either provide or consume. To match up against Delphi's WideString
you need to use the COM BSTR
data type.
Another problem with your code as it stands is that it uses cdecl
in the C++ side, and stdcall
on the Delphi side. You'll need to align the calling conventions.
However, that will also fail because of a difference between Delphi's ABI for return values, and the platform standard. That topic was covered in detail here: Why can a WideString not be used as a function return value for interop?
Your best bet is to stop using WideString
as a return value and convert it into a C++ reference parameter. You'll want to convert the Delphi to match.
You are looking at something like this:
Delphi
procedure rData(ID: Cardinal; queue: WideString; var Result: WideString); stdcall;
C++
typedef void (__stdcall *ReturnDataSPL)(DWORD, BSTR, BSTR&);