Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a string array to an external DLL?

Tags:

delphi

I have an external function like this:

extern "C" __declspec(dllexport) int __cdecl Identify(BSTR* bstrTemplates, __int64 lCount, __int64* lIndex, __int64* lRetCode) 

The bstrTemplates should be a string array.

How should my function look like in D7, and how to pass a string array to the external function. Can't get my head around right now.

like image 212
devployment Avatar asked Dec 19 '25 08:12

devployment


1 Answers

A BSTR is a WideString in Delphi, and a pointer to a BSTR is also a pointer to a WideString in Delphi, but in terms of C-code, it is most likely an array reference. A typical way to handle such arrays, and I'm going to assume this is how it's done here, is to use a null-terminated array.

So, we need to declare an array of WideString's in Delphi, and leave the last element as null, or nil in Delphi:

var
  templates : array of WideString;
begin
  SetLength(templates, 3); // 2 template names + 1 nil
  templates[0] := 'template1';
  templates[1] := 'template2';
  templates[2] := nil;

  Identify(@templates[0], ....); // pass it as a pointer to the first element

I'm not guaranteeing this will work. I'm guessing here, and haven't tried it (which would involve creating a C project and testing) so this might fail horribly. Worth a shot though.

like image 114
Lasse V. Karlsen Avatar answered Dec 20 '25 23:12

Lasse V. Karlsen