Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#4

AW: AnsiStringArray aus DLL an Excel-VBA

  Alt 26. Apr 2019, 07:32
Habe dir das mal schnell zusammen geklopft..
Alle Strings (PAnsiChars) werden aus der DLL von der const AnsiString_Vektor_GLOBAL an VBA(VB) geschickt.
ShareMem ist wohl hier nicht nötig..

Das ist alles..

Delphi-Quellcode:
library Delphi_String_for_Excel_Test;

uses ShareMem, SysUtils, Classes;

{$R *.res}

const
   AnsiString_Vektor_GLOBAL: Array [0..3] of PAnsiChar =
     ('1: Erster String',
      '2: Das ist der ZWEITE String!',
      '3: ...und hier ist der DRITTE!',
      '4: Schlußlicht-String...');

function PAnsiChar_To_Excel(Delimiter: AnsiChar = ';'): PAnsiChar; stdcall;
var
  IntI: Integer;
  erg: AnsiString;
begin

  for IntI := 0 to 3 do
  begin
    erg := erg + AnsiString(AnsiString_Vektor_GLOBAL[IntI]) + Delimiter;
    erg := copy(erg, 1, length(erg));
  end;
  result := PAnsiChar(erg);
end;

exports
   PAnsiChar_To_Excel;

begin

end.
VBA..
Module..
Code:
Public Declare Function PAnsiChar_To_Excel Lib "Delphi_String_for_Excel_Test" ( _
    Optional ByVal Delimiter As Byte = 59 _
) As Long
Form..
Code:
Option Explicit

Private Sub cmdGet_Click()

Dim IntI      As Integer
Dim flist     As String
Dim uB        As Integer
Dim LngP      As Long
Dim alist()   As String
Dim Delimiter As Byte

    ListInput.Clear
    Delimiter = 124 ' >>> Default ohne Angabe = 59 = ";"
   
    LngP = PAnsiChar_To_Excel(Delimiter) ' >>> "|"

    flist = VBStrFromAnsiPtr(LngP)
    alist = Split(flist, "|")
   
    If flist > "" Then
        uB = UBound(alist)
        For IntI = 0 To uB
            ListInput.AddItem alist(IntI)
        Next
    End If
   
End Sub
gruss

Geändert von EWeiss (11. Jul 2019 um 15:59 Uhr)
  Mit Zitat antworten Zitat